java创建实现多线程的方式

Posted

tags:

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

一、Java使用多线程主要有三种方式:

第一种:继承Thread类

步骤:① 定义一个类,继承Thread类,并重写Thead类的run方法,run方法内的内容为该线程要执行的任务。run方法也被称为执行体。

           ② 创建Thead子类的实例,即创建线程对象。

           ③ 使用线程的start方法启动线程。

 

第二种:实现Runnable方法

步骤:① 定义一个类,实现Runnable接口,并重写该接口的run方法,run方法体仍然是执行体。

           ② 创建一个Thead类的实例,并将实现Runnable接口的类的实例作为参数传入Thead类的构造器中。

           ③ 调用Thread类实例的start方法启动线程。

 

第三种:实现Callable接口(需使用Future接口的实现类配合) 

步骤:①  定义一个类A,实现Callable接口,并重写该接口的call方法,call方法体仍然是执行体,call方法有返回值

           ② 创建实现Callable接口的类A的实例B,并使用Future接口的实现类FutureTask子类包装B,FutureTask对象封装了B的call方法的返回值。

           ③ 创建一个Thead类的实例,并将FutureTask的类的实例作为参数传入Thead类的构造器中。

           ④  调用Thread类实例的start方法启动线程。

           ⑤ 需要时,调用FutureTask类的实例的get方法获取call方法的返回值。

 

二、创建线程的三种方式的对比

采用实现Runnable、Callable接口的方式创建多线程时,优势是:

线程类只是实现了Runnable接口或Callable接口,还可以继承其他类(java类可实现多个接口,但只能继承一个父类)。

在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

劣势是:

编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

使用继承Thread类的方式创建多线程时优势是:

编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

劣势是:

线程类已经继承了Thread类,所以不能再继承其他父类。

 

三、使用线程池执行线程

jdk1.5之后新增的java.util.concurrent包中提供了很多种线程池的实现:

技术分享

可以使用 Executors 就行创建,只需创建线程对象,放入调用ExecutorService的execute方法并将创建的线程对象传入即可,无需用户再手动启动线程,

同时可以提高线程的利用率。


 

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

多线程创建方式

多线程 Thread 线程同步 synchronized

面试官:Java多线程有哪几种实现方式如何实现?

Java 多线程基础多线程的实现方式

Java 多线程基础多线程的实现方式

第77题JAVA高级技术-多线程11(创建线程的5种方式)