问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 多线程有几种实现方法

发布网友 发布时间:2022-04-24 02:09

我来回答

1个回答

热心网友 时间:2023-05-28 20:33

1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

[java] view plain copy
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
}
}
在合适的地方启动线程如下:

[java] view plain copy
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();

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

[java] view plain copy
public class MyThread extends OtherClass implements Runnable {
public void run() {
System.out.println("MyThread.run()");
}
}
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

[java] view plain copy
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

[java] view plain copy
public void run() {
if (target != null) {
target.run();
}
}

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就可以实现传说中有返回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 java有几种方法可以实现一个线程 java中有几种方法可以实现一个线程? 繁体字然怎么写??? 如何在java中实现线程 然字怎么组词??? 然的草书怎么写 然五笔怎么打字 “然”该怎么解释这一个字 然怎么组词? 然字的笔画顺序怎么写 “然”字如何正确用田字格书写? 然字的拼音怎么打? 然字的笔顺怎么写 然后的然字怎么写 “然”字怎么组词语? 然这个字怎么读 自考学位证书有什么用处? 学位证和学士证以及毕业证结业证区别? EMBA学位证书有什么用? 学位证书、专业证书哪个更重要? java的多线程有哪些实现方式 java怎么让一个方法实现线程 him怎么召唤出来? 为什么水杯转动,杯子里面的水和茶叶不动,这怎么回事啊? 《我的世界》召唤him的指令是什么? 怎么样才能在我的世界里召唤正版的Him不装mod 将装满水的杯子放在玻璃上旋转是什么原理? 喝茶的时候转动茶杯是什么意思 我的世界召唤him的指令是什么? 为什么装满了水的杯子,旋转时不会流出? 在我的世界经典版里面怎样可以召唤出him? 为什么杯子里的水旋转的时候中间低边上高? 《我的世界》无模组召唤him指令是什么? 为什么旋转茶杯,里面浮起的茶叶不动? 召唤him的指令? 水杯里的水为什么转杯水不转? 快速转动水杯,滴水不漏的原因是什么? 水杯旋转角度与最大容量的问题 转杯子问题 桌上有3只杯口朝上的茶杯,每次翻转2只,经过若干次翻转,能否3只杯口全部朝下?谢谢!