国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【多線程編程核心技術】多線程的死鎖

tabalt / 3682人閱讀

摘要:使用工具監測死鎖進入的安裝目錄中的目錄,執行命令可以看出得到運行的線程的值為,再執行命令,查看結果

死鎖

Java 線程是死鎖是一個經典的多線程問題,因為不同的線程都在等待根本不可能被釋放的鎖,從而導致所有的任務都無法繼續完成

舉個例子

DealThread.java

package dealThread.demo;

public class DealThread implements Runnable{
    public String username;
    public Object lock1 = new Object();
    public Object lock2 = new Object();
    
    public void setFlag(String username){
        this.username = username;
    }
    
    @Override
    public void run(){
        if(username.equals("a")){
            synchronized (lock1){
                try{
                    System.out.println("username="+username);
                    Thread.sleep(3000);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
                
                synchronized (lock2){
                    System.out.println("lock1 -> lock2");
                }
            }
        }
        
        if(username.equals("b")){
            synchronized (lock2){
                try{
                    System.out.println("username="+username);
                    Thread.sleep(3000);
                }catch(InterruptedException e){
                    e.printStackTrace();
                }
            
                synchronized (lock1){
                    System.out.println("lock2 -> lock1");
                }
            }
        }
    }
    
}

Run.java

package dealThread.demo;

public class Run {
    public static void main(String[] args){
        try{
            DealThread t1 = new DealThread();
            t1.setFlag("a");
            Thread thread1 = new Thread(t1);
            thread1.start();
            Thread.sleep(1000);
            
            t1.setFlag("b");
            Thread thread2 = new Thread(t1);
            thread2.start();
            
        }catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

運行結果如下:

線程thread1和thread2都持有對方的鎖,而且需要等待對方釋放鎖之后才能往下繼續運行,這個時候就發生了死鎖;其實不使用嵌套的synchronized代碼結構也會出現死鎖,與嵌套不嵌套沒有任何關系,只要互相等待對方釋放鎖就有可能出現死鎖。

使用JDK工具監測死鎖

進入JDK的安裝目錄中的bin目錄,執行jps命令:

可以看出得到運行的線程Run的id值為7404,再執行jstack命令,查看結果:

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72026.html

相關文章

  • 線程編程完全指南

    摘要:在這個范圍廣大的并發技術領域當中多線程編程可以說是基礎和核心,大多數抽象并發問題的構思與解決都是基于多線程模型來進行的。一般來說,多線程程序會面臨三類問題正確性問題效率問題死鎖問題。 多線程編程或者說范圍更大的并發編程是一種非常復雜且容易出錯的編程方式,但是我們為什么還要冒著風險艱辛地學習各種多線程編程技術、解決各種并發問題呢? 因為并發是整個分布式集群的基礎,通過分布式集群不僅可以大...

    mengera88 評論0 收藏0
  • Java線程學習(七)并發編程中一些問題

    摘要:因為多線程競爭鎖時會引起上下文切換。減少線程的使用。舉個例子如果說服務器的帶寬只有,某個資源的下載速度是,系統啟動個線程下載該資源并不會導致下載速度編程,所以在并發編程時,需要考慮這些資源的限制。 最近私下做一項目,一bug幾日未解決,總惶恐。一日頓悟,bug不可怕,怕的是項目不存在bug,與其懼怕,何不與其剛正面。 系列文章傳送門: Java多線程學習(一)Java多線程入門 Jav...

    yimo 評論0 收藏0
  • Java線程學習(七)并發編程中一些問題

    摘要:相比與其他操作系統包括其他類系統有很多的優點,其中有一項就是,其上下文切換和模式切換的時間消耗非常少。因為多線程競爭鎖時會引起上下文切換。減少線程的使用。很多編程語言中都有協程。所以如何避免死鎖的產生,在我們使用并發編程時至關重要。 系列文章傳送門: Java多線程學習(一)Java多線程入門 Java多線程學習(二)synchronized關鍵字(1) java多線程學習(二)syn...

    dingding199389 評論0 收藏0
  • (二)線程應用及挑戰

    摘要:上下文切換會影響到線程的執行速度,對于系統來說意味著會消耗大量的時間減少上下文切換的方式無鎖并發編程,在多線程競爭鎖時,會導致大量的上下文切換。線程在中的使用在中實現多線程的方式比較簡單,因為中提供了非常方便的來實現多線程。 文章簡介 上一篇文章我們了解了進程和線程的發展歷史、線程的生命周期、線程的優勢和使用場景,這一篇,我們從Java層面更進一步了解線程的使用 內容導航 并發編程的...

    hqman 評論0 收藏0
  • 線程死鎖就是這么簡單

    摘要:此時線程需要鎖才能繼續往下執行。但是線程的鎖并沒有釋放,線程的鎖也沒有釋放。 前言 只有光頭才能變強 回顧前面: ThreadLocal就是這么簡單 多線程三分鐘就可以入個門了! 多線程基礎必要知識點!看了學習多線程事半功倍 Java鎖機制了解一下 AQS簡簡單單過一遍 Lock鎖子類了解一下 線程池你真不來了解一下嗎? 本篇主要是講解死鎖,這是我在多線程的最后一篇了。主要將多線程...

    winterdawn 評論0 收藏0

發表評論

0條評論

tabalt

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<