第五周作业(Java多线程创建的三个方法)

   我最近在学习Java中多线程,并且觉得多线程这块在以后的Java开发中显得极为重要,就谈一下Java实现多线程的三种方式。

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有第三种是带返回值的,这种方式一般要求比较高,并且较前两种难一些。

1、继承Thread类实现多线程
继承Thread类的本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,通过调用start()方法执行线程。

eg:

public class MyThread extends Thread {  

public void run() {  

   System.out.println("MyThread.run()");  

  }  

MyThread myThread1 = new MyThread();  

MyThread myThread2 = new MyThread();  

myThread1.start();  

myThread2.start();

}  

2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口。

示例代码:

public class MyThread extends OtherClass implements Runnable {  

public void run() {  

   System.out.println("MyThread.run()");  

  }  

}

 

public class Main{

public static void main(String[] args){

MyThread myThread = new MyThread();  

Thread thread = new Thread(myThread);  

thread.start();  

}

3、使用ExecutorService、Callable、Future实现有返回结果的多线程
ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。

 

     由于三种方式都可以用于创建多线程,并且三种方式实现原理中前两种方式本质相同,就我个人而言,我推荐第二种方式,通过实现Runnable接口实现多线程,不推荐使用第一种,就Java的特点来说,不支持多继承,要是几成Thread类来实现多想成就不能让该类在几成其他的类,通过第二种方法更能体现Java面向对象的特征,并且JVM底层Thread累也是实现Runnable接口来实现的,第三种方式由于比较难,一般不会要求太过掌握,但当生产环境需要时,我们就要乐趣学习了。

        

转载于:https://www.cnblogs.com/qin180236/p/5348138.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值