码迷,mamicode.com
首页 > 编程语言 > 详细

线程同步——死锁问题

时间:2018-06-12 22:32:25      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:jvm   系统   static   span   string   div   sys   tar   完成   

1、问题

1.1  产生的原因

  系统有两个线程在跑,每个线程有两个锁,当线程一用了锁1,这个时候jvm调用线程二用了锁2,这个时候线程二不能打开锁1,程序就一直停在这里了

1.2  具体问题

  有两个人Aman和Bman去执行刺杀任务,看成两个线程,老板那里只有一把匕首,要刺杀的只有一个人。Aman拿到了匕首,准备去接刺杀任务,但是任务却被Bman接了。Aman没有接刺杀任务,不能刺杀。Bman没有匕首,不能完成刺杀

1.3  解决办法

  推荐不要用嵌套synchronized

2、代码

  

 1 public class Demo {
 2     public static void main(String[] args) {
 3         String s1 = "匕首";
 4         String s2 = "刺杀";
 5         new Thread() {
 6 
 7             @Override
 8             public void run() {
 9                 while (true) {
10                     synchronized (s1) {
11                         System.out.println(this.getName() + "拿到匕首" + "准备刺杀");
12                         synchronized (s2) {
13                             System.out.println(this.getName() + "正在刺杀");
14                         }
15                     }
16                 }
17             }
18             
19         }.start();
20         
21         new Thread() {
22 
23             @Override
24             public void run() {
25                 while (true) {
26                     synchronized (s2) {
27                         System.out.println(this.getName() + "拿到匕首" + "准备刺杀");
28                         synchronized (s1) {
29                             System.out.println(this.getName() + "正在刺杀");
30                         }
31                     }
32                 }
33             }
34             
35         }.start();
36     }
37 }

 

线程同步——死锁问题

标签:jvm   系统   static   span   string   div   sys   tar   完成   

原文地址:https://www.cnblogs.com/Dbbf/p/9175174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!