Java——多線程(死鎖)

死鎖是指:兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。

同步代碼塊不要嵌套,因為,嵌套容易死鎖,避免死鎖的出現,不要進行同步代碼塊的嵌套

package com.yy.syn;
//只有獲得到一雙筷子才可以吃
public class Demo5_DeadLock {private static String s1 = "筷子1";private static String s2 = "筷子2";public static void main(String[] args) {new Thread(){                               //第一個線程Thread-0,在上面,所以,它先開啟,先開始執行,執行的機會多public void run(){while(true){synchronized (s1) {         //系統先拿到s1System.out.println(getName() + "...獲取" + s1 + "等待" + s2 );//之后,執行這句話synchronized (s2) {         //正準備獲取s2的時候,第二條線程啟動System.out.println(getName() + "...拿到" + s2 +"開吃" );}}}}}.start();new Thread(){public void run(){while(true){synchronized (s2) {         //第二條線程獲取到s2System.out.println(getName() + "...獲取" + s2 + "等待" + s1 );//之后,執行這句話synchronized (s1) {         //然后,再準備去獲取s1,但是s1已經被第一條線程獲取,第一條線程并未釋放s1System.out.println(getName() + "...拿到" + s1 +"開吃" );}}}}}.start();}
}
//之后,第一條線程獲得了s1,第二條線程獲取了s2,第一條線程想獲取s2,但是,s2被第二條線程所獲取,而第二條線程想獲取s1,但是s1被第一條線程所獲取,所以,兩條線程開始僵持,最后造成死鎖
//但是,也會有一種發生概率極低的情況,一種理想狀態,即 第一條線程先拿到s1然后輸出一句話,然后再拿到s2輸出一句話,然后再釋放s1,釋放s2;然后,第二條線程開始獲取s2,輸出,然后再獲取s1,輸出

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c# 前導0_C#| 用前導零填充整數

c# 前導0To pad an integer number with leading zero, we can use String.Format() method which is library method of String class in C#. 要用前導零填充整數,我們可以使用String.Format()方法,該方法是C#中String類的庫方法。 using S…

走到盡頭的技術-MVC

MVC技術是一種WebApplication設計技術,相比于傳統Web應用程序,MVC可以使程序結構更加清晰,他采用 Model,View,Controller 來管理和架構我們的Web資源,將不同的請求(request)導向不同…

Search Engine -垂直搜索小匯總

FilesTube: 共享文件搜索引擎,文件來自:Rapidshare, MegaUpload, Megashares, YouSendIt, SaveFile, FileFront和Badongo等很多文件儲存網站,支持的文件格式包括:AVI, MP3, MPEG, MPG, RAR, WMA, WMV, EXE, ZIP等,主要為媒體格式,不支持中文 Picsearch:專業圖片搜索引擎,中文界…

Java——多線程(線程安全問題)

同步為安全,不同步為不安全;也就是有synchronized這個標識符,就為線程安全,反之,為線程不安全。 ①Vector是線程安全的 ②StringBuffer是線程安全的 ③Hashtable是線程安全的 Collections.synchronized(xxx)&#…

web安全---XSS利用平臺BLUE-LOTUS安裝與使用

0x01 安裝 環境:windows、phpstudy 下載地址:https://gitee.com/gid1314/BlueLotus_XSSReceiver-master 下載后將文件解壓,重命名為blue,放在www目錄下 訪問:http://IP/blue 點擊安裝 這里只需要修改后臺登陸密碼和…

C#Convert.ToInt32(bool)方法-將bool值轉換為int

C#Convert.ToInt32(bool)方法 (C# Convert.ToInt32(bool) Method) Convert.ToInt32(bool) Method is used to convert a specific Boolean (bool) value to its equivalent integer (int 32 signed number). Convert.ToInt32(bool)方法用于將特定的布爾值(布爾值)轉…

配置Microsoft Visual SourceSafe 2005的Internet訪問

配置Microsoft Visual SourceSafe 2005的Internet訪問 VSS2005發布以后,早就聽說可以支持Internet訪問,這是一個很有意思的特性。前兩天有空,就安裝配置了一下,成功訪問。現在安裝過程發布出來,大家共享。 步驟0&…

使用delphi 開發多層應用(十)安全訪問服務器

前面講了如何建立和訪問服務器,但是前面建的服務器都沒有安全控制,這里有很大的安全問題,第一是任何人做一個客戶端都可以都可以訪問 服務器。第二是數據在網絡傳輸過程中都是明碼的,沒有加密,使用網絡偵聽器就可以檢測到傳輸的內容。這是一個…

數組push()方法以及JavaScript中的示例

JavaScript push()方法 (JavaScript push() method) push() method is used adds/inserts an element at the end of an array, it returns nothing but changes the length of the array. push()方法用于在數組末尾添加/插入元素,它只返回改變數組的長度&#xff0…

C——整除的尾數

Problem Description 一個整數&#xff0c;只知道前幾位&#xff0c;不知道末二位&#xff0c;被另一個整數除盡了&#xff0c;那么該數的末二位該是什么呢&#xff1f; Input 輸入數據有若干組&#xff0c;每組數據包含二個整數a&#xff0c;b&#xff08;0< a<10000…

web安全---瀏覽器解析提交數據的過程

解碼規則 html解析器對html文檔進行解析&#xff0c;完成解析并創建DOM樹JavaScript或者CSS解析器對內聯腳本進行解析&#xff0c;完成js、css解碼url解碼會根據url所在的順序不同而在JS解碼或者解碼后 解碼順序 html解析第一步執行&#xff0c;而JS解析和URL解析則要根據情…

commons-lang的FastDateFormat性能測試

commons-lang的FastDateFormat是一個thread-safe的&#xff0c;對SimpleDateFormat的一個重新實現。 SimpleDateFormat為什么不是thread-safe的呢&#xff1f;看一下具體實現就知道了&#xff0c;其父類中定義了成員變量Calendar&#xff0c;每次格式化日期時都會先重置這個Cal…

C——Flowers

Problem Description As you know, Gardon trid hard for his love-letter, and now he’s spending too much time on choosing flowers for Angel. When Gardon entered the flower shop, he was frightened and dazed by thousands kinds of flowers. “How can I choose!”…

include函數_include()函數以及JavaScript中的示例

include函數includes() is a predefined function in JavaScript, which is used to check whether a given element exists in the array or not? include()是JavaScript中的預定義函數&#xff0c;用于檢查數組中是否存在給定元素&#xff1f; Example: 例&#xff1a; &l…

利用POI創建OpenOffice中的Excel文件

之所以稱為OpenOffice的Excel文件,我發現了一個特點就是: 一些網站嚴格限定了文件必須為MS的Excel格式的話,用POI的HSSF創建的Excel就會不識別.不知道是什么原因,可能是版本的問題,據說HSSF(令人討厭的電子表格格式)生成的是MS97的格式.但是97-2003的提示中明顯的說明了MS的lib…

批處理文章集錦

http://www.5dmail.net/html/2005-10-17/20051017181702.htmhttp://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html轉載于:https://www.cnblogs.com/Jessy/archive/2012/02/29/2372955.html

web安全-----CSRF漏洞

簡述 CSRF&#xff1a;Cross-site request -forgery&#xff0c;跨站請求偽造&#xff0c;是一種web攻擊方式&#xff0c;是由于網站的cookie在瀏覽器中不會過期&#xff0c;只要不關閉瀏覽器或者退出登錄&#xff0c;那以后只要訪問這個網站&#xff0c;都會默認你已經登錄。…

java math 類_Java Math類靜態長輪(double d)示例

java math 類數學課靜態長回合(雙D) (Math Class static long round(double d) ) This method is available in java.lang package. 此方法在java.lang包中可用。 This method is used to return the closest long value to the given argument. 此方法用于將最接近的long值返回…

C——求平均成績

Problem Description 假設一個班有n(n<50)個學生&#xff0c;每人考m(m<5)門課&#xff0c;求每個學生的平均成績和每門課的平均成績&#xff0c;并輸出各科成績均大于等于平均成績的學生數量。 Input 輸入數據有多個測試實例&#xff0c;每個測試實例的第一行包括兩個…

依賴、關聯、聚合、組合還有泛化的關系(轉載)

依賴、關聯、聚合、組合還有泛化的關系 此文為轉載文章:http://zjzkiss.cnblogs.com/世界是普遍聯系的&#xff0c;因此程序世界中的類&#xff0c;也不可能是孤立的。UML為我們定義了它們之間的關系&#xff0c;就是&#xff1a;依賴、關聯、聚合、組合還有泛化。 泛化關系比…