在上一篇中我们了解到Controller和Service中使用全局变量会导致线程安全问题,那么线程是怎么创建出来的呢?
1. 线程的两种实现方式
- 继承Thread类
//继承Thread类
static class MyThread1 extends Thread{
@Override
public void run() {
System.out.println("继承Thread实现自己的线程");
}
}
- 实现Runnable接口
//实现Runnable接口
static class MyThread2 implements Runnable{
@Override
public void run() {
System.out.println("实现Runnable接口实现自己的线程");
}
}
2.线程的启动
public static void main(String[] args) {
//1.通过继承Thread创建自己的线程并且启动
new MyThread1().start();
//2.通过实现Runnable,创建自己的线程并且启动
new Thread(new MyThread2()).start();
//3.通过匿名内部类创建线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类实现的线程");
}
}).start();
//4.lambda表达式创建线程
new Thread(()->{
System.out.println("通过");
}).start();
}
注意 不管用哪种方式实现自己的线程,最终要启动线程必须得通过Thread.start()方法启动,start()方法会把线程交给CPU去调度执行,只有当CPU调度到线程把时间片分配给它,线程才会执行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。