Java多線程死鎖問(wèn)題
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
76套java從入門到精通實(shí)戰(zhàn)課程分享
死鎖問(wèn)題
死鎖定義
死鎖舉例
/**
* 線程死鎖問(wèn)題
*/
public class DeadLock {
public static void main(String[] args) {
//創(chuàng)建兩個(gè)鎖對(duì)象
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;因?yàn)榫€程是并發(fā)執(zhí)行我們不知道誰(shuí)先執(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ā)生的條件
怎么解決死鎖問(wèn)題?
public class SolveDeadLock {
public static void main(String[] args) {
//創(chuàng)建兩個(gè)鎖對(duì)象
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)面試重點(diǎn)
LockSupport
LockSupport與wait()區(qū)別
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/weixin_44874269/article/details/116639326
粉絲福利:Java從入門到入土學(xué)習(xí)路線圖
??????

??長(zhǎng)按上方微信二維碼 2 秒
感謝點(diǎn)贊支持下哈 
評(píng)論
圖片
表情






