线程的死锁问题
作者:
冯宏志 | 来源:发表于
2020-12-15 11:29 被阅读0次
- 不同线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的思索
- 出现思索后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续
解决线程安全问题的方式三:Lock锁(JDK5新增)
- 实例化ReentrantLock(ReentrantLock是实现了Lock接口的一个类)
- 调用锁定方法fflock()
- 调用解锁unlock()
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
Window w = new Window();
Thread t1 = new Thread(w);
Thread t2 = new Thread(w);
Thread t3 = new Thread(w);
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t1.start();
t2.start();
t3.start();
}
}
class Window implements Runnable{
private int ticket = 100;
//实例化ReentrantLock
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while (true) {
try {
//调用锁定lock()
lock.lock();
if (ticket > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "买票,票号为:" + ticket);
ticket--;
} else
break;
} finally {
//调用解锁方法unlock()
lock.unlock();
}
}
}
}
- synchronized与Lock的不同
synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器。
Lock需要手动启动同步lock()
,同时结束同步也需要手动实现unlock()
本文标题:线程的死锁问题
本文链接:https://www.haomeiwen.com/subject/rvtziktx.html
网友评论