本帖最后由 格子、 于 2014-8-6 15:39 编辑
死锁含义:当t>=2时,因抢夺资源造成的相互等待,若无外力他们都将无法进行
条件:
互斥:线程个个都得独占一个资源,别的进不来
请求与保持:不放过拥有,请求另一资源被阻塞
不剥夺:占着的没使用完不能强行剥夺
循环等待:若干线程间形成了一种头尾相接的等待资源
原因:访问共享资源顺序不当
*死锁例子:(同步嵌套同步)
- class Test implements Runnable {
- private boolean flag;
- Test(boolean flag) // 构造函数 用来初始化
- {
- this.flag = flag;
- }
- public void run() {
- if (flag) {
- while (true) {
- synchronized (MyLock.locka) {
- System.out.println(Thread.currentThread().getName()
- + "...if locka ");
- synchronized (MyLock.lockb) {
- System.out.println(Thread.currentThread().getName()
- + "..if lockb");
- }
- }
- }
- } else {
- while (true) {
- synchronized (MyLock.lockb) {
- System.out.println(Thread.currentThread().getName()
- + "..else lockb");
- synchronized (MyLock.locka) {
- System.out.println(Thread.currentThread().getName()
- + ".....else locka");
- }
- }
- }
- }
- }
- }
- class MyLock {
- static Object locka = new Object();
- static Object lockb = new Object();
- }
- public class DeadLockTest {
- public static void main(String[] args) {
- Thread t1 = new Thread(new Test(true));
- Thread t2 = new Thread(new Test(false));
- t1.start();
- t2.start();
- }
- }
复制代码
|
-
死锁.jpg
(625.83 KB, 下载次数: 3)
死锁
|