引言
最近在看汪文君大佬的"Java高并发编程实战"的视频,感觉受益匪浅.打算把学习过程中的一些知识点记录下来,以便日后复习.
因为大佬的视频分四个阶段,加起来好几百集,所以我会写一个系列文章(希望自己能坚持下来).Ok,let's get started:
P1主要讲解了课程大纲,P2讲解了线程的基本概念,这里不再复述. P3讲解了如何创建线程,这里就涉及到创建线程的几种方式.JDK的官方文档上明确说明有两种创建方式,一种是继承Thread类,一种是实现runnable接口.网上也有其他方式,比如使用lambda,实现callable接口,也有说使用ExcuterService创建线程池的方式来创建线程,其实后面几种本质上还是用的官方文档提到的那两种方式,但是因为在实际的开发过程中都会被频繁使用,所以在此我们一一说明.
创建线程的几种方式
继承Thread类重写run方法
public class CreateThread {
class myThread extends Thread{
@Override
public void run() {
System.out.println("Thread1 started");
}
}
private void createThread1(){
Thread thread = new myThread();
thread.start();
}
}
这种方式有一个变体就是,我们直接使用匿名来重写run方法,具体如下:
private void createThread2(){
Thread thread = new Thread(){
@Override
public void run() {
System.out.println("Thread2 started");
}
};
thread.start();
}
如果实现类不会被重用的话,使用匿名类的方式更简洁一些. 当然,引入lambda表达式后,可以用更加简洁的方式,具体如下
private void createThread3(){
Thread thread = new Thread(() => {System.out.println("Thread3 started");});
thread.start();
}
总结
上面的三种写法归根到底还是使用的继承Thread类重写run方法这种方式,我们把他们归为一类.下一篇会讲到另一种创建方式:实现runnable接口的run方法.