创建线程的常见的几种方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建线程的常见的几种方式相关的知识,希望对你有一定的参考价值。

参考技术A                                                      创建线程的常见的几种方式

1.继承Thread类,重写run方法

继承Thread类的线程实现方式如下:

2.通过实现Runnable接口,重写run方法

3.通过Callable和FutureTask创建线程

(如上图FutureTask类实现了RunnableFuture接口,RunnableFuture接口继承了Runnable接口和Future接口,此时可知最终也是通过runnable接口调用的,Future帮助获取callable接口执行过程中的返回值或终止callable接口的执行)。future接口的常用的三种方法

a:创建Callable接口的实现类 ,并实现Call方法 

b:创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值 

c:使用FutureTask对象作为Thread对象创建并启动线程

d:调用FutureTask对象的get()来获取子线程执行结束的返回值

打印结果:

3.通过线程池的方式创建线程

比较

实现接口和继承thread类的比较

Runnable接口和callable接口的比较

创建线程的几种方式

说道线程,肯定会想到使用 java.lang.Thread.java这个类

那么创建线程也主要有2种方式

第一种方式:

public class MyThread extends Thread  {
    public void run() {
        System.out.println("这是MyThread线程");
    }
}

然后在调用处,执行start方法即可:

MyThread myThread = new MyThread();
myThread.start();

第二种方式实现Runnable接口:

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("这是MyThread线程"); 
  }
}

同样在执行的地方直接生命这个MyRunnable,再直接丢进线程start即可:

MyRunnable runBary = new MyRunnable();
Thread thread = new Thread(runBary);
thread.start();

这两种方式都可以用匿名类的方式来实现,但是我并不推荐;

另外使用Thread本身来实现线程还是用Runnable来做,我推荐后者,因为相对来说会比较方便,直接往线程中一扔即可,如果使用spring的线程执行器也是同样的道理,往执行器中丢入这个runnable即可

需要注意的是,执行线程的时候可以使用start()方法或者run()方法,虽然使用run会达到同样的效果,

但是run是在主线程中使用的,也就是使用你当前的方法内线程,而不是另起一个线程,这样就达不到异步的效果,所以务必使用start()

 

以上是关于创建线程的常见的几种方式的主要内容,如果未能解决你的问题,请参考以下文章

线程--创建线程的几种方式及源码分析

创建线程的几种方式

创建线程及启动的几种方式

创建线程的几种方式

线程池的五种状态及创建线程池的几种方式

创建线程的几种方式