Java多線程死鎖問題
點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時間送達(dá)
死鎖問題
死鎖定義
死鎖舉例
/**
* 線程死鎖問題
*/
public class DeadLock {
public static void main(String[] args) {
//創(chuàng)建兩個鎖對象
Object lock1 = new Object();
Object lock2 = new Object();
//創(chuàng)建子線程
/*
線程1:①先獲得鎖1 ②休眠1s,讓線程2獲得鎖2 ③線程1嘗試獲取鎖2 線程2同理
*/
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
//線程1業(yè)務(wù)邏輯
synchronized(lock1){
System.out.println("線程1得到了鎖子1");
try {
//休眠1s,讓線程2先得到鎖2
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程1嘗試獲取鎖2...");
synchronized(lock2){
System.out.println("線程1獲得了鎖2!");
}
}
}
},"線程1");
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
//線程2業(yè)務(wù)邏輯
synchronized(lock2){
System.out.println("線程2得到了鎖子2");
try {
//休眠1s,讓線程1先得到鎖1;因為線程是并發(fā)執(zhí)行我們不知道誰先執(zhí)行
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程2嘗試獲取鎖1...");
synchronized(lock1){
System.out.println("線程2獲得了鎖1");
}
}
}
},"線程2");
thread1.start();
thread2.start();
}
}
如何排查死鎖
死鎖發(fā)生的條件
怎么解決死鎖問題?
public class SolveDeadLock {
public static void main(String[] args) {
//創(chuàng)建兩個鎖對象
Object lock1 = new Object();
Object lock2 = new Object();
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
//線程1業(yè)務(wù)邏輯
synchronized(lock1){
System.out.println("線程1得到了鎖子1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程1嘗試獲取鎖2...");
synchronized(lock2){
System.out.println("線程1獲得了鎖2!");
}
}
}
},"線程1");
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
//線程2業(yè)務(wù)邏輯
synchronized(lock1){
System.out.println("線程2得到了鎖子1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("線程2嘗試獲取鎖2...");
synchronized(lock2){
System.out.println("線程2獲得了鎖2");
}
}
}
},"線程2");
thread1.start();
thread2.start();
}
}
線程通訊機(jī)制(wait/notify/notifyAll)
定義
相關(guān)面試重點
LockSupport
LockSupport與wait()區(qū)別
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/weixin_44874269/article/details/116639326
鋒哥最新SpringCloud分布式電商秒殺課程發(fā)布
??????
??長按上方微信二維碼 2 秒
感謝點贊支持下哈 
評論
圖片
表情






