亲宝软件园·资讯

展开

原创】Java并发编程系列2:线程概念与基础操作

McBye 人气:0
## 【原创】Java并发编程系列2:线程概念与基础操作 > 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现。 本篇为【Dali王的技术博客】Java并发编程系列第二篇,讲讲有关线程的那些事儿。主要内容是如下这些: - 线程概念 - 线程基础操作 ### 线程概念 进程代表了运行中的程序,一个运行的Java程序就是一个进程。在Java中,当我们启动main函数时就启动了一个JVM的进程,而main函数所在的线程就是这个进程中的一个线程,称为主线程。 进程和线程的关系如下图所示: ![file](https://img2020.cnblogs.com/other/923731/202003/923731-20200321230306993-1934490457.jpg) 由上图可以看出来,一个进程中有多个线程,多个线程共享进程的堆的方法区资源,但是每个线程有自己的程序计数器和栈区域。 ### 线程基础操作 #### 线程创建与运行 Java中有三种线程创建方式,分别为:继承Thread类并重写run方法,实现Runnable接口的run方法,使用FutureTask方式。 先看继承Thread方式的实现,代码示例如下: ```java:n public class ThreadDemo { public static class DemoThread extends Thread { @Override public void run() { System.out.println("this is a child thread."); } } public static void main(String[] args) { System.out.println("this is main thread.") DemoThread thread = new DemoThread(); thread.start(); } } ``` 上面代码中DemoThread类继承了Thread类,并重写了run方法。在main函数里创建了一个DemoThread的实例,然后调用其start方法启动了线程。 > tips:调用start方法后线程并没有马上执行,而是处于就绪状态,也就是这个线程已经获取了除CPU资源外的其他资源,等待获取CPU资源后才会真正处于运行状态。 使用继承方式,好处在于通过this就可以获取当前线程,缺点在于Java不支持多继承,如果继承了Thread类,那么就不能再继承其他类。而且任务与代码耦合严重,一个线程类只能执行一个任务,使用Runnable则没有这个限制。 来看实现Runnable接口的run方法的方式,代码示例如下: ```java:n public class RunnableDemo { public static class DemoRunnable implements Runnable { @Override public void run() { System.out.println("this is a child thread."); } } public static void main(String[] args) { System.out.println("this is main thread."); DemoRunnable runnable = new DemoRunnable(); new Thread(runnable).start(); new Thread(runnable).start(); } } ``` 上面代码两个线程共用一个Runnable逻辑,如果需要,可以给RunnableTask添加参数进行任务区分。在Java8中,可以使用Lambda表达式对上述代码进行简化: ```java:n public static void main(String[] args) { System.out.println("this is main thread."); Thread t = new Thread(() -> System.out.println("this is child thread")); t.start(); } ``` 上面两种方式都有一个缺点,就是任务没有返回值,下面看第三种,使用FutureTask的方式。代码示例如下: ```java:n public class CallableDemo implements Callable

加载全部内容

相关教程
猜你喜欢
用户评论