多线程
2021-03-31 本文已影响0人
迷迷糊糊的番薯
实现多线程
1、继承Thread类,重写run方法
2、实现Runnable接口
线程的状态
新建状态(New) :new Thread()后就进入新建状态。
就绪状态(Runnable):start()启动线程后处于就绪状态。
运行状态(Running):线程获取cpu权限进行执行。只能从就绪状态进入运行状态。
阻塞状态(Blocked):
(1)等待阻塞:wait() (可以由notify唤醒)
(2)同步阻塞:synchronized()同步锁
(3)其他阻塞:sleep、join等。
sleep和wait的区别,sleep不会释放锁,wait释放锁。
死亡状态(Dead):
锁
synchronized是一种同步锁
synchronized可以修饰方法、代码块、类,是隐式锁,出了作用域会自动释放
lock是显式锁,需要手动开启和关闭锁
private final ReentrantLock lock = new ReentrantLock();
public void method(){
lock.lock();
try {
// 保证线程安全的代码
}
finally {
// 如果同步代码有异常,要把unlock写到finally中(一般直接写上)
lock.unlock();
}
}