线程死锁问题
1 package com.demo.bingfa;
2
3 /**
4 * java并發(fā)編程中,死鎖的概念
5 *
6 * 我們啟用了兩個線程,分別搶占2個資源,但這兩個資源又分別被不同的對象(字符串)鎖住了。
7 * 當?shù)谝粋€線程調用 resource1 方法,進入同步塊,拿到鎖,并等待 1 秒鐘讓另一個線程進入
8 * resource2 同步塊,當?shù)诙€線程進入同步塊后,注意:此時, 拿著 resourec1 鎖的線程企
9 * 圖拿到 resource2 的鎖,但這個時候,拿著 resource2 的線程也想去拿 resource1 的鎖。于
10 * 是就出現(xiàn)了互相僵持的情況,誰也無法拿到對方的鎖,整個系統(tǒng)就卡死了。
11 */
12 public class DeadLock {
13 public static void main(String[] args) {
14 //lambda表達式,
15 //啟動一個線程去獲取資源1。
16 Thread thread1 = new Thread(() -> {
17 try {
18 new DeadLock().resource1();
19 } catch (InterruptedException e) {
20 e.printStackTrace();
21 }
22 });
23 thread1.setName("線程1");
24 thread1.start();
25
26 //啟動另一個線程去獲取資源2.
27 Thread thread2 = new Thread(() -> {
28 try {
29 new DeadLock().resource2();
30 } catch (InterruptedException e) {
31 e.printStackTrace();
32 }
33 });
34 thread2.setName("線程2");
35 thread2.start();
36 }
37
38 void resource1() throws InterruptedException{
39 synchronized ("resource1"){
40 System.out.println("獲取資源1");
41 //等待1秒,讓另外一個線程獲取資源
42 Thread.sleep(1 * 1000);
43 resource2();
44 }
45 }
46
47 void resource2() throws InterruptedException{
48 synchronized ("resource2"){
49 System.out.println("獲取資源2");
50 //等待1秒,讓另外一個線程獲取資源
51 Thread.sleep(1 * 1000);
52 resource1();
53 }
54 }
55 }
我們以后在線上的話,怎么去查找線程死鎖的問題呢?
1:jps命令。線程號,類名
?
2:jstack? 打印進程棧的信息
?
轉載于:https://www.cnblogs.com/bulrush/p/10766929.html
總結
- 上一篇: 蓝桥杯——机器人行走
- 下一篇: 工商银行信用卡怎么查卡号?教你快速查卡号