在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
多线程是Java学习中不可绕过的一个重要知识点,相信大家对于多线程的定义已经很清晰了。一般来讲,我们说的多线程是指这个程序运行时,产生了不止一个线程。对于多线程的创建方式一直也是Java面试中的重点,本文就来为大家详细解答一下关于多线程创建方式的疑问,感兴趣的小伙伴现在赶紧来一起看看吧!
创建方式一:继承 Thread 类:
但 Thread 本质上也是实现了 Runnable 接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。这种方式实现多线程很简单,通过自己的类直接 extend Thread,并复写 run()方法,就可以启动新线程并执行自己定义的 run()方法。例如:继承 Thread 类实现多线程,并在合适的地方启动线程。
public class MyThread extends Thread {
public void run() {
System.out.println("MyThread.run()");
}
}
MyThread myThread1 = new MyThread(); 7.MyThread myThread2 = new MyThread(); myThread1.start();
myThread2.start();
创建方式二:实现 Runnable 接口的方式实现多线程,并且实例化 Thread,传入自己的Thread 实例,调用 run( )方法
public class MyThread implements Runnable
public void run() {
System.out.println("MyThread.run()");
}
}
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
创建方式三:使用 ExecutorService、Callable、Future 实现有返回结果的多线程:ExecutorService、Callable、Future 这 个 对 象 实 际 上 都 是 属 于 Executor 框 架 中 的 功 能 类 。
下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5 下验证过没问题可以直接使用。代码如下:
import java.util.concurrent.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
/**
* 有返回值的线程
*/
@SuppressWarnings("unchecked")
public class Test {
public static void main(String[] args) throws ExecutionException,
InterruptedException {
System.out.println("----程序开始运行----");
Date date1 = new Date();
int taskSize = 5;
// 创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
// 创建多个有返回值的任务
List<Future> list = new ArrayList<Future>();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 执行任务并获取 Future 对象
Future f = pool.submit(c);
// System.out.println(">>>" + f.get().toString());
list.add(f);
}
// 关闭线程池
pool.shutdown();
// 获取所有并发任务的运行结果
for (Future f : list) {
// 从 Future 对象上获取任务的返回值,并输出到控制台
System.out.println(">>>" + f.get().toString());
}
Date date2 = new Date();
System.out.println("----程序结束运行----,程序运行时间【"
+ (date2.getTime() - date1.getTime()) + "毫秒】");
}
}
class MyCallable implements Callable<Object> {
private String taskNum;
MyCallable(String taskNum) {
this.taskNum = taskNum;
}
public Object call() throws Exception {
System.out.println(">>>" + taskNum + "任务启动");
Date dateTmp1 = new Date(); 53.Thread.sleep(1000);
Date dateTmp2 = new Date();
long time = dateTmp2.getTime() - dateTmp1.getTime(); 56.System.out.println(">>>" + taskNum + "任务终止");
return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";
}
}
以上就是关于多线程创建方式面试题的解答,大家都看明白了吗?希望本文能够解决大家对于多线程的一些疑问,关于Java中的多线程的更多面试题,大家可以在Java的就业班的课程中进行更加详细的学习。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java基础开发的集合类都有哪些?主要方法有什么?
你所知道的Java基础开发的集合类都有哪些?主要方法有什么?最常用的集合类是 List 和 Map。 List 的具体实现包括ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
7655
2019-06-03 11:16:40
Java程序员的求职面试简历应该怎么写?
Java程序员的求职面试简历应该怎么写?首先要做到信息的完整,比如基本信息、求职意向、工作经历、项目经验这几大简历版块一定得有。然后简历内容要做到简单明了,详略得当。即要求大家简单概括自身与岗位匹配的同时,又要充分展现自己的优势。下面小编详细讲讲怎样准备一份能让自己从众多Java程序员中脱颖而出的简历,希望对大家求职面试有所帮助。
5632
2019-10-30 14:27:33
2019蚂蚁金服Java开发面试题含答案
一般来讲,蚂蚁金服这样的大公司都会有至少三次的技术面试。前一轮的问题一般都是比较基础的问题,当然对于许多人来讲,基础性的问题也不一定简单。本文就专门针对Java开发的面试者,整理出了最新的蚂蚁金服一面题,并附上了参考答案,希望可以帮到即将要到蚂蚁金服面试的求职者。如果近期没有面试需求的朋友,也可以查漏补缺,看看自己的学习有哪些欠缺的地方。
6342
2019-12-02 19:29:44
百度、腾讯、阿里招聘常见的Java面试真题
百度、腾讯、阿里招聘常见Java面试真题,面试在求职中是一项非常重要的内容,面试中表现往往决定着求职者是否可以被录用。面试过程中做好充足准备,有技巧地应对考官的提问可能会给整个面试加分。
5488
2020-06-23 10:14:42
企业招聘Java程序员的标准是什么?
现在互联网领域技术人才辈出,想要找到一份适合自己的好工作,一定要知己知彼敢于亮剑。其中最重要的一个因素是作为求职者,我们应该了解企业招聘Java程序员的标准。根据企业的需求“对症下药”才能手到擒来好的工作机会。
5471
2020-07-29 09:37:29