4 package cn.com.io.threadDemo.ThreadSyn;
5
6 /**
7 * 通过两个属性值创建死锁
8 * 本程序通过两个线程各自锁定一个属性值,这样两个线程都无法结束,造成死锁
9 * @author Administrator
10 *
11 */
12 public class ThreadSyn2
implements Runnable{
13
14 private static Object obj1=
new Object();
15
16 private static Object obj2=
new Object();
17
18 /**
19 * @param args
20 */
21 public static void main(String[] args) {
22 ThreadSyn2 ts1=
new ThreadSyn2();
23 ThreadSyn2 ts2=
new ThreadSyn2();
24
25 Thread t1=
new Thread(ts1);
//线程1
26 Thread t2=
new Thread(ts2);
//线程2
27 t1.setName("theOne"
);
28 t2.setName("theTwo"
);
29
30 t1.start();
31 t2.start();
32
33 }
34
35 public void run() {
36 String name=
Thread.currentThread().getName();
37 if(name.equals("theOne"
)){
38 method1(name);
39 }
else{
40 method2(name);
41 }
42
43 }
44
45 //线程1的方法锁定obj1,线程2就无法完成
46 private void method1(String name) {
47 System.out.println(name);
48 synchronized(obj1){
49 try {
50 Thread.sleep(1000
);
51 }
catch (InterruptedException e) {
52 e.printStackTrace();
53 }
54 synchronized(obj2){
55 System.out.println(obj2);
56 }
57 }
58 }
59
60 //线程1的方法锁定obj2,线程1就无法完成
61 private void method2(String name) {
62 System.out.println(name);
63 synchronized(obj2){
64 try {
65 Thread.sleep(1000
);
66 }
catch (InterruptedException e) {
67 e.printStackTrace();
68 }
69 synchronized(obj1){
70 System.out.println(obj1);
71 }
72 }
73 }
74 }
转载于:https://www.cnblogs.com/isoftware/p/3802669.html
转载请注明原文地址: https://win8.8miu.com/read-1542619.html