在线客服
扫描二维码
下载博学谷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的就业班的课程中进行更加详细的学习。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
2019年学Java在北京找工作难吗?
现在很多人传言Java市场已经饱和了,不好就业,即使是就业机会大的北京也不再需要那么多的Java技术人才,这个说法真的对吗?下面小编仔细为大家分析一下,2019年学Java在北京找工作难吗?
8885
2019-07-11 18:59:41
Java知识分享:Activiti的流程部署
之前为大家介绍了关于BPMN的认知文章,本片文章主要为大家介绍Activiti的流程部署,Activiti是一个独立运作和经营的开源项目品牌。Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现。下面介绍在IDEA中如何部署一个简单的考勤补签流程:
8125
2019-07-12 17:21:58
Java多态面试题汇总含答案
多态是同一个行为具有多个不同表现形式或形态的能力,它也是对象多种表现形式的体现。本文为大家整理汇总了,近年来比较常见且典型的Java多态面试题。当然,本次对面试题的总结整理,更加注重大家对于多态知识的掌握,而不仅仅只是对面试的应付。每道面试题后面都会附上相关问题的答案和分析,让大家充分理解相关知识点。
8712
2019-12-17 11:22:02
MyBatis十大经典面试题整理附答案
MyBatis作为一个备受欢迎的持久层框架,有着支持普通SQL查询,存储过程和高级映射等优势。这也是为什么大家都爱使用MyBatis的原因。在面试过程中,MyBatis也是面试官常常会考察求职者的知识点之一,本文应许多面试者的要求,为大家整理了十大经典的MyBatis面试题和对应的答案,有面试需求的小伙伴不妨一起来复习一下。
7116
2020-01-15 20:40:47
Java的线程并发库介绍
对于Java程序员而言,了解并掌握多线程是极其重要的,因为多线程在工作中的使用场景实在是太常见了。而仅仅掌握了Java中的传统多线程机制还是不够的,下面给大家介绍一下Java的线程并发库,主要包括java.util.concurrent包 、java.util.concurrent.atomic包和java.util.concurrent.lock包。
5682
2020-04-24 10:48:56
