在线客服
扫描二维码
下载博学谷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面试中的一个常见重要考点,因此本文为大家整理了面向对象的相关面试题,其中包括面向对象的特性、访问权限修饰符和clone对象的理解。大家可以结合着参考答案,梳理一遍面向对象的相关知识点。
6481
2019-12-04 14:01:29
Java基础练习之评委打分
在学习Java的过程中,最重要的就是多敲代码多练习,只有这样才巩固所学的基础理论知识。本文为大家提供了Java中一个十分经典的基础练习题——评委打分,并且附上了思路和答案,下面大家一起来做做吧~
4554
2020-05-28 15:41:04
BAT大厂Java常见面试题分享
马上就要到今年的秋招季节了,不知道大家有没有准备好面试,能不能准确把握面试官的考核点,能否准确理解并说出技术技能的底层原理和应用,能否在面试前猜中考点?如果大家对于面试还没有做好充足的准备,建议大家都来看看博学谷的《BAT 大厂Java常见面试题》课程,相信对大家准备面试,或多或少会有一些帮助。
4121
2020-07-23 15:23:19
Java程序员面试自我介绍部分讲什么内容?技巧分享
Java程序员自我介绍要有一条清晰的线索,便于组织自我介绍。保证结构明确有条有理多用短句子便于口语表述,在段与段之间使用过渡句子,口语要注意思路、叙述语言的流畅尽量避免颠三倒四同一句话反复说几遍,同时不要用过于随便的表述。
2965
2021-06-08 15:02:47
在北京Java开发工程师的岗位要求高吗?
Java语言是一种简洁的面向对象程序设计语言,在行业中占有重要的地位,应用非常广泛Java可以用来开发网站、编写手机APP、开发小游戏、编程小程序等。
2680
2021-11-18 13:59:58