一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java線程死鎖代碼示例

java線程死鎖代碼示例

2021-02-20 11:40rese-t Java教程

這篇文章主要介紹了java線程死鎖代碼示例,分享了一個簡單線程死鎖的例子,需要的朋友可以參考下。

死鎖是操作系統層面的一個錯誤,是進程死鎖的簡稱,最早在 1965 年由 Dijkstra 在研究銀行家算法時提出的,它是計算機操作系統乃至整個并發程序設計領域最難處理的問題之一。

事實上,計算機世界有很多事情需要多線程方式去解決,因為這樣才能最大程度上利用資源,才能體現出計算的高效。但是,實際上來說,計算機系統中有很多一次只能由一個進程使用的資源的情況,例如打印機,同時只能有一個進程控制它。在多通道程序設計環境中,若干進程往往要共享這類資源,而且一個進程所需要的資源還很有可能不止一個。因此,就會出現若干進程競爭有限資源,又推進順序不當,從而構成無限期循環等待的局面。我們稱這種狀態為死鎖。簡單一點描述,死鎖是指多個進程循環等待它方占有的資源而無限期地僵持下去的局面。很顯然,如果沒有外力的作用,那么死鎖涉及到的各個進程都將永遠處于封鎖狀態。

文件名:DeadThreadByExtend.java

注:

1、起線程的時候用的是start方法,run方法也可以調用,但是僅僅相當于普通調用,在當前線程內執行。

2、synchronized 不能直接修飾變量。

3、synchronized 塊并不會強制塊內變量的單線程訪問。僅僅意味著在執行塊內語句時鎖住synchronized (args)的參數,直到執行結束才釋放。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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();
    }
}

總結

以上就是本文關于java線程死鎖代碼示例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持。

原文鏈接:http://www.cnblogs.com/rese-t/p/7857812.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人综合视频 | 国产成人高清精品免费观看 | 国产不卡视频 | 国产播放器一区 | 成3d漫二区三区四区 | 国产嘿咻 | 婷婷中文网 | 国产精品反差婊在线观看 | 精品国产成人AV在线看 | 国产99精品免费视频看6 | 欧美国产日产精品免费视频 | 欧洲破处 | 亚洲国产香蕉视频欧美 | 国产欧美精品一区二区三区四区 | 外女思春台湾三级 | 99在线播放 | 美女插插视频 | 九九热视频 这里有精品 | 国产亚洲视频在线 | 国产自拍影院 | 操破苍穹小说 | 国产欧美日韩不卡一区二区三区 | eeuss免费快捷 | 女bbbbxxx孕妇 | 1769最新资源站 | 涩涩屋视频在线观看 | 国产精品毛片无码 | 欧洲美女啪啪 | 欧美视频免费 | 亚洲成年网站在线观看 | 美女毛片视频 | 日韩视频在线免费 | 国产良心大作白丝精厕 | 99re热 | 国产精品久久久久久五月尺 | 维修工的调教 | 色综合色狠狠天天综合色 | 午夜爽喷水无码成人18禁三级 | 亚洲国产成人精品无码区APP | 色倩网站| 东方影视欧美天天影院 |