无标题文章

Deadlock

1. 死锁产生:

count = 10000:

无标题文章_第1张图片
count=10000.PNG

count = 20000:
无标题文章_第2张图片
count=20000.PNG

count = 5000:
无标题文章_第3张图片
count=5000.PNG

2. 对上述程序产生死锁的解释:

关键字 synchronized:当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码;当一个线程访问object的一个synchronized同步代码块或同步方法时,其他线程对object中所有其他synchronized同步代码块或同步方法的访问将被阻塞。

无标题文章_第4张图片
image002.jpg

在主函数的时间轴中,当t.start()之后,线程t就被插入到调度队列里,当调度到他时,就执行run()。
无标题文章_第5张图片
image005.jpg

这里设置了一个count值,当t.start()执行后,就开始延时,执行b.methodB(a),当延时结束后,若t.start()尚未执行完毕,主线程中开始执行a.methodA(b),由于关键字synchroniazed的限制,不能有两个以上的线程同时执行,因此产生死锁。

4. 产生死锁的4个必要条件:

死锁就是两个或者多个进程,互相请求对方占有的资源。

  • 互斥条件:一个资源每次只能被一个进程使用
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

你可能感兴趣的:(无标题文章)