java線程死鎖代碼示例
死鎖是操作系統(tǒng)層面的一個錯誤,是進程死鎖的簡稱,最早在 1965 年由 Dijkstra 在研究銀行家算法時提出的,它是計算機操作系統(tǒng)乃至整個并發(fā)程序設(shè)計領(lǐng)域最難處理的問題之一。
事實上,計算機世界有很多事情需要多線程方式去解決,因為這樣才能最大程度上利用資源,才能體現(xiàn)出計算的高效。但是,實際上來說,計算機系統(tǒng)中有很多一次只能由一個進程使用的資源的情況,例如打印機,同時只能有一個進程控制它。在多通道程序設(shè)計環(huán)境中,若干進程往往要共享這類資源,而且一個進程所需要的資源還很有可能不止一個。因此,就會出現(xiàn)若干進程競爭有限資源,又推進順序不當,從而構(gòu)成無限期循環(huán)等待的局面。我們稱這種狀態(tài)為死鎖。簡單一點描述,死鎖是指多個進程循環(huán)等待它方占有的資源而無限期地僵持下去的局面。很顯然,如果沒有外力的作用,那么死鎖涉及到的各個進程都將永遠處于封鎖狀態(tài)。
文件名:DeadThreadByExtend.java
注:
1、起線程的時候用的是start方法,run方法也可以調(diào)用,但是僅僅相當于普通調(diào)用,在當前線程內(nèi)執(zhí)行。
2、synchronized 不能直接修飾變量。
3、synchronized 塊并不會強制塊內(nèi)變量的單線程訪問。僅僅意味著在執(zhí)行塊內(nèi)語句時鎖住synchronized (args)的參數(shù),直到執(zhí)行結(jié)束才釋放。
package com.ycf.study.thread;
class Sources{
int a;
public void setA(int x) {
synchronized (this) {
this.a = x;
try {
Thread.sleep(2000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class DeadThreadByExtend {
public static void main(String[] args) {
Sources s1 = new Sources();
Sources s2 = new Sources();
class MyThread1 extends java.lang.Thread {
@Override
public void run() {
System.out.println("線程1開始");
synchronized (s1) {
System.out.println("線程1申請修改s1");
s1.setA(20);
System.out.println("線程1修改完成");
System.out.println("線程1申請修改s2");
s2.setA(10);
System.out.println("線程1修改s2完成");
}
System.out.println("線程1退出并釋放鎖++++++++++");
}
}
class MyThread2 extends java.lang.Thread {
@Override
public void run() {
System.out.println("線程2開始");
synchronized (s2) {
System.out.println("線程2申請修改s2");
s2.setA(20);
System.out.println("線程2修改s2完成");
System.out.println("線程2申請修改s1");
s1.setA(10);
System.out.println("線程2修改s1完成");
}
System.out.println("線程2退出并釋放鎖++++++++++");
}
}
MyThread1 mt1 = new MyThread1();
MyThread2 mt2 = new MyThread2();
mt1.start();
mt2.start();
}
}
總結(jié)
以上就是本文關(guān)于java線程死鎖代碼示例的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持。
相關(guān)文章
JAVA基于Arrays.sort()實現(xiàn)數(shù)組升序和降序
這篇文章主要介紹了JAVA基于Arrays.sort()實現(xiàn)數(shù)組升序和降序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
解決IDEA下載依賴包源碼報錯Sources not found for:org.spri
IDEA查看源碼時如遇無法下載源代碼報錯,可通過Maven命令或配置IDEA自動下載源碼來解決,保證依賴包能自動獲取源碼,提升開發(fā)體驗2025-10-10
Java8新特性O(shè)ptional類及新時間日期API示例詳解
這篇文章主要為大家介紹了Java8新特性O(shè)ptional類及新時間日期API示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
淺談java中Math.random()與java.util.random()的區(qū)別
下面小編就為大家?guī)硪黄獪\談java中Math.random()與java.util.random()的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09

