Java基礎(三十八) 執行緒相關

2021-08-31 13:27:10 字數 3459 閱讀 3526

執行緒的同步與死鎖

1:同步問題的引出

class mythread implements runnable  else 

} }}public class test

}//執行結果

票販子b賣票,ticket = 10

票販子b賣票,ticket = 8

票販子a賣票,ticket = 9

票販子a賣票,ticket = 6

票販子c賣票,ticket = 9

票販子c賣票,ticket = 4

票販子a賣票,ticket = 5

票販子b賣票,ticket = 7

票販子b賣票,ticket = 1

***** 票已經賣光了 *****

票販子a賣票,ticket = 2

***** 票已經賣光了 *****

票販子c賣票,ticket = 3

***** 票已經賣光了 *****

class mythread implements runnable  catch (interruptedexception e) 

system.out.println(thread.currentthread().getname() + "賣票,ticket = " + this.ticket --);

} else

} }}public class test

}票販子c賣票,ticket = 10

票販子b賣票,ticket = 8

票販子a賣票,ticket = 9

票販子c賣票,ticket = 7

票販子a賣票,ticket = 6

票販子b賣票,ticket = 5

票販子c賣票,ticket = 4

票販子a賣票,ticket = 2

票販子b賣票,ticket = 3

票販子c賣票,ticket = 1

***** 票已經賣光了 *****

票販子b賣票,ticket = 0

***** 票已經賣光了 *****

票販子a賣票,ticket = -1

***** 票已經賣光了 *****

三個執行緒都過了檢測那一關

當多個執行緒訪問同一資源的時候,我們如何能夠保證資料的完整性,這個時候就需要用同步來解決了

2:執行緒同步-利用同步**塊進行處理

如果要想在程式之中實現這把鎖的功能,就可以使用synchronized關鍵字來實現,利用此關鍵字可以定義同步方法或同步**塊,在同步**塊的操作裡面的**只允許乙個執行緒執行。

觀察下面的**來解決上述問題中存在的問題;

class mythread implements runnable  catch (interruptedexception e) 

system.out.println(thread.currentthread().getname() + "賣票,ticket = " + this.ticket --);

} else

}} }

}public class test

}//執行結果

票販子a賣票,ticket = 10

票販子c賣票,ticket = 9

票販子c賣票,ticket = 8

票販子b賣票,ticket = 7

票販子b賣票,ticket = 6

票販子b賣票,ticket = 5

票販子b賣票,ticket = 4

票販子b賣票,ticket = 3

票販子b賣票,ticket = 2

票販子b賣票,ticket = 1

***** 票已經賣光了 *****

***** 票已經賣光了 *****

***** 票已經賣光了 *****

上述**加入了同步:加入同步處理之後,程式的整體效能下降了。同步實際上會造成效能的下降。

3;同步問題:利用同步方法解決:只需要在定義的方法上使用synchronized關鍵字即可

class mythread implements runnable  catch (interruptedexception e) 

system.out.println(thread.currentthread().getname() + "賣票,ticket = " + this.ticket --);

return true ;

} else

} @override

public void run() }}

public class threaddemo

}//執行結果

票販子b賣票,ticket = 10

票販子b賣票,ticket = 9

票販子c賣票,ticket = 8

票販子c賣票,ticket = 7

票販子c賣票,ticket = 6

票販子c賣票,ticket = 5

票販子c賣票,ticket = 4

票販子c賣票,ticket = 3

票販子c賣票,ticket = 2

票販子c賣票,ticket = 1

***** 票已經賣光了 *****

***** 票已經賣光了 *****

***** 票已經賣光了 *****

4:死鎖

}

執行效果如下;

I學霸官方免費教程三十八 Java基礎教程之異常

程式中不正常的情況分為兩大類 錯誤 error 和異常 exception 錯誤 error 程式本身無法對這種不正常的情況進行處理,將會導致程式崩潰 例如 記憶體耗盡錯誤,jvm崩潰錯誤等 異常 exception 程式可以特殊的 對不正常的情況進行捕獲和處理,程式可以繼續執行 例如 除零異常,空...

Java併發程式設計八 執行緒池

1.降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。2.提高響應速度。當任務到達時,任務可以不需要的等到執行緒建立就能立即執行。3.提高執行緒的可管理性。執行緒是稀缺資源,如果無限制的建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一的分配,調優和監控。...

Java程式設計師從笨鳥到菜鳥(三十八)vue

1.實現上 original message p methdos reversed message p computed reversed message p div data methods computed script 執行結果 original message hello methdos r...