1、死鎖
①什么是死鎖?
雙方因為互相等待對方的資源而進入了循環(huán)等待的過程
②產(chǎn)生死鎖的條件?
1、環(huán)路等待
2、持有并等待
3、互斥
4、不剝奪
必須滿足以上4個條件,才會產(chǎn)生死鎖
④示例代碼
public static void main(String[] args) { new T1().start(); new T2().start(); } static class T1 extends Thread { @Override public void run() { a(); } public void a() { while (true) { synchronized (T1.class) { synchronized (T2.class) { System.out.println("a"); } } } } } static class T2 extends Thread { @Override public void run() { b(); } public void b() { while (true) { synchronized (T2.class) { synchronized (T1.class) { System.out.println("b"); } } } } }
解釋:
互斥:T1和T2存在鎖互斥條件
環(huán)路等待及持有并等待:T1持有T1鎖,等待T2鎖;T2持有T2鎖,等待T1鎖。
操作系統(tǒng)的不剝奪~~
⑤死鎖的檢測工具
jconsole // 可直接檢測死鎖 jstack // 查看線程堆棧信息
⑥死鎖的解決方法
1、同樣的加鎖順序
2、加鎖限時,例如使用Lock
2、線程饑餓
①什么是線程饑餓?
線程饑餓是指線程得不到運行
②為什么會產(chǎn)生線程饑餓?
1、高優(yōu)先級線程搶占低優(yōu)先級線程的CPU時間片,導致低優(yōu)先級線程無法執(zhí)行
2、線程被永久阻塞在等待進入同步塊的狀態(tài),其他線程總是能在該線程之前持續(xù)對該同步塊進行訪問
③解決方案
1、避免使用優(yōu)先級
2、使用公平鎖
3、活鎖
活鎖不會阻塞線程,但是線程不能繼續(xù)執(zhí)行。因為線程一直在執(zhí)行重復的操作,但是總會丟失。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76680.html
摘要:和方法用來設置線程是否成為守護線程和判斷線程是否是守護線程。守護線程依賴于創(chuàng)建它的線程,隨它的消亡而消亡。使用提供的方法,提醒線程終止,但是否真正終止由線程自己決定。參考實戰(zhàn)高并發(fā)程序設計多線程干貨系列一多線程基礎 一、如何創(chuàng)建多線程 1、繼承Thread類 public class MyThread extends Thread { @Override public ...
摘要:本文探討并發(fā)中的其它問題線程安全可見性活躍性等等。當閉鎖到達結束狀態(tài)時,門打開并允許所有線程通過。在從返回時被叫醒時,線程被放入鎖池,與其他線程競爭重新獲得鎖。 本文探討Java并發(fā)中的其它問題:線程安全、可見性、活躍性等等。 在行文之前,我想先推薦以下兩份資料,質量很高:極客學院-Java并發(fā)編程讀書筆記-《Java并發(fā)編程實戰(zhàn)》 線程安全 《Java并發(fā)編程實戰(zhàn)》中提到了太多的術語...
摘要:將與當前線程建立一對一關系的值移除。為了讓方法里的操作具有原子性,也就是在一個線程執(zhí)行這一系列操作的同時禁止其他線程執(zhí)行這些操作,提出了鎖的概念。 上頭一直在說以線程為基礎的并發(fā)編程的好處了,什么提高處理器利用率啦,簡化編程模型啦。但是磚家們還是認為并發(fā)編程是程序開發(fā)中最不可捉摸、最詭異、最扯犢子、最麻煩、最惡心、最心煩、最容易出錯、最不符合社會主義核心價值觀的一個部分~ 造成這么多最...
摘要:發(fā)布的對象內部狀態(tài)可能會破壞封裝性,使程序難以維持不變性條件。不變性線程安全性是不可變對象的固有屬性之一。可變對象必須通過安全方式來發(fā)布,并且必須是線程安全的或者有某個鎖保護起來。 線程的優(yōu)缺點 線程是系統(tǒng)調度的基本單位。線程如果使用得當,可以有效地降低程序的開發(fā)和維護等成本,同時提升復雜應用程序的性能。多線程程序可以通過提高處理器資源的利用率來提升系統(tǒng)的吞吐率。與此同時,在線程的使用...
閱讀 2041·2023-04-25 15:11
閱讀 3462·2021-09-23 11:57
閱讀 1372·2021-07-26 23:38
閱讀 1319·2019-08-30 15:54
閱讀 635·2019-08-30 15:53
閱讀 3245·2019-08-26 13:36
閱讀 986·2019-08-26 12:01
閱讀 2863·2019-08-23 16:21