前言:我相信创建线程的方式对于所有的java开发程序员来说都不陌生,在面试过程中这个问题也是高频考点。鉴于此,小编用本篇博文来整理几种线程的创建方式,希望对同学们有所帮助~
文章目录
- 一、什么是进程?线程和进程有什么关系?
- 二、线程如何创建?有几种方式?
-
- 1.继承Thread类
- 2.实现Runable接口
- 3.实现Callable接口结合FutureTask
- 4.使用lambda表达式
- 5.使用线程池创建
一、什么是进程?线程和进程有什么关系?
进程是程序的一次执行过程,是资源分配的最小单位
线程是CPU调度的最小单位
线程是进程的一部分
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
二、线程如何创建?有几种方式?
线程的创建有很多种方式,总结下来分为以下几种
1.继承Thread类
/**
* 创建线程的第一种方式:继承Thread类
*/
public class MyThread01 extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在运行");
}
public static void main(String[] args) {
MyThread01 myThread01 = new MyThread01();
myThread01.start();
System.out.println(Thread.currentThread().getName() + "正在运行");
}
}
2.实现Runable接口
需要注意的是,当使用实现Runnable接口的方式创建的线程在线程启动的时候不能直接用实现Runnable接口的实现类调start()方法,而是要当做参数传入Thread类实例,然后调用start()方法进行线程启动,原因就是下面这个Runnable接口的实现类MyThread02 不是线程类。
/**
* 创建线程的第二种方式:实现Runnable接口
*/
public class MyThread02 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在运行");
}
public static void main(String[] args) {
MyThread02 myThread02 = new MyThread02();
Thread thread = new Thread(myThread02);
thread.start();
System.out.println(Thread.currentThread().getName() + "正在运行");
}
}
小知识:其实我们的第一种方式中继承的Thread类在源码中也是实现了Runnable接口哟~
3.实现Callable接口结合FutureTask
这种创建线程的方式在实际工作中不用常用,所以在面试过程中也很少有遇到,但是了解一些也是加分项哟。 FutureTask是一个实现Runnable接口的类,FutureTask内部有一个成员变量将callable接口的返回值保存起来,并通过提供get方法获取。
/**
* 创建线程的第三种方式:实现Callable接口,结合FutureTask
*/
public class MyThread03 implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println(Thread.currentThread().getName() + "正在运行");
return "call() 执行完毕";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
FutureTask<String> futureTask = new FutureTask<>(new MyThread03());
Thread thread3 = new Thread(futureTask);
thread3.start();
System.out.println(Thread.currentThread().getName() + futureTask.get());
}
}
4.使用lambda表达式
/**
* 创建线程的第四种方式:使用Lambda表达式
*/
public class MyThread04 {
public static void main(String[] args) {
Thread thread = new Thread(() ->{
System.out.println(Thread.currentThread().getName() + "正在运行");
});
thread.start();
}
}
当然也可以简写为这样:
/**
* 创建线程的第四种方式:使用Lambda表达式
*/
public class MyThread04 {
public static void main(String[] args) {
new Thread(() ->{
System.out.println(Thread.currentThread().getName() + "正在运行");
}).start();
}
}
5.使用线程池创建
这种方式其实是实际工作中使用的最多的一种方式,但同时也是大家在面试回答过程中很容易遗漏的。由于这块东西比较多,小编决定后续单独出一篇文章就行补充总结,敬请期待~
相关文章
暂无评论...