用户线程和守护线程
用户线程
Thread.setDaemon(false)
守护线程
Thread.setDaemon(true)
要在线程启动之前设置线程属性,否则会报IllegalThreadStateException异常
如果不设置线程属性,那么默认为用户线程
区别
用户线程:当一个进程中没有任何用户线程时,进程结束(JVM存活)
守护线程:当最后一个用户线程结束时,所有守护线程死亡(JVM结束)
线程中断-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2p1LqSkt-1648555233292)(https://secure2.wostatic.cn/static/kexn1QTFKmAZGXAdoPbUJS/image.png)]
线程同步
// 多线程同步需使用同一把锁
同步代码块
private Object obj = new Object();
public void threadTest() {
synchronized (obj) {
// ...
}
}
同步方法
public synchronized void threadTest() {
// ...
}
显示锁
private Lock l = new ReentrantLock();
public void threadTest() {
l.lock();
// ...
l.unlock();
}
显示锁和隐示锁的区别—
公平锁与非公平锁
公平锁——先来先到
private Lock l = new ReentrantLock(faie:true);
非公平锁(默认)——抢
private Lock l = new ReentrantLock(faie:false);
线程死锁-
死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。