成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

線程系列二、線程的活躍性

wow_worktile / 1049人閱讀

1、死鎖

①什么是死鎖?

雙方因?yàn)榛ハ嗟却龑?duì)方的資源而進(jìn)入了循環(huán)等待的過程

②產(chǎn)生死鎖的條件?

1、環(huán)路等待

2、持有并等待

3、互斥

4、不剝奪

必須滿足以上4個(gè)條件,才會(huì)產(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)的不剝奪~~

⑤死鎖的檢測(cè)工具

jconsole  // 可直接檢測(cè)死鎖
jstack // 查看線程堆棧信息

⑥死鎖的解決方法

1、同樣的加鎖順序

2、加鎖限時(shí),例如使用Lock

2、線程饑餓

①什么是線程饑餓?

線程饑餓是指線程得不到運(yùn)行

②為什么會(huì)產(chǎn)生線程饑餓?

1、高優(yōu)先級(jí)線程搶占低優(yōu)先級(jí)線程的CPU時(shí)間片,導(dǎo)致低優(yōu)先級(jí)線程無法執(zhí)行

2、線程被永久阻塞在等待進(jìn)入同步塊的狀態(tài),其他線程總是能在該線程之前持續(xù)對(duì)該同步塊進(jìn)行訪問

③解決方案

1、避免使用優(yōu)先級(jí)

2、使用公平鎖

3、活鎖

活鎖不會(huì)阻塞線程,但是線程不能繼續(xù)執(zhí)行。因?yàn)榫€程一直在執(zhí)行重復(fù)的操作,但是總會(huì)丟失。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76680.html

相關(guān)文章

  • 線程學(xué)習(xí)筆記(2):多線程基礎(chǔ)

    摘要:和方法用來設(shè)置線程是否成為守護(hù)線程和判斷線程是否是守護(hù)線程。守護(hù)線程依賴于創(chuàng)建它的線程,隨它的消亡而消亡。使用提供的方法,提醒線程終止,但是否真正終止由線程自己決定。參考實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)多線程干貨系列一多線程基礎(chǔ) 一、如何創(chuàng)建多線程 1、繼承Thread類 public class MyThread extends Thread { @Override public ...

    HelKyle 評(píng)論0 收藏0
  • Java并發(fā)編程筆記(

    摘要:本文探討并發(fā)中的其它問題線程安全可見性活躍性等等。當(dāng)閉鎖到達(dá)結(jié)束狀態(tài)時(shí),門打開并允許所有線程通過。在從返回時(shí)被叫醒時(shí),線程被放入鎖池,與其他線程競(jìng)爭(zhēng)重新獲得鎖。 本文探討Java并發(fā)中的其它問題:線程安全、可見性、活躍性等等。 在行文之前,我想先推薦以下兩份資料,質(zhì)量很高:極客學(xué)院-Java并發(fā)編程讀書筆記-《Java并發(fā)編程實(shí)戰(zhàn)》 線程安全 《Java并發(fā)編程實(shí)戰(zhàn)》中提到了太多的術(shù)語...

    NickZhou 評(píng)論0 收藏0
  • Java并發(fā)編程之原子性操作

    摘要:將與當(dāng)前線程建立一對(duì)一關(guān)系的值移除。為了讓方法里的操作具有原子性,也就是在一個(gè)線程執(zhí)行這一系列操作的同時(shí)禁止其他線程執(zhí)行這些操作,提出了鎖的概念。 上頭一直在說以線程為基礎(chǔ)的并發(fā)編程的好處了,什么提高處理器利用率啦,簡(jiǎn)化編程模型啦。但是磚家們還是認(rèn)為并發(fā)編程是程序開發(fā)中最不可捉摸、最詭異、最扯犢子、最麻煩、最惡心、最心煩、最容易出錯(cuò)、最不符合社會(huì)主義核心價(jià)值觀的一個(gè)部分~ 造成這么多最...

    instein 評(píng)論0 收藏0
  • 譯文-G1收集器

    摘要:原文出處設(shè)計(jì)的一個(gè)重要目標(biāo)是設(shè)置階段的持續(xù)時(shí)長(zhǎng)和頻率,因?yàn)槔占骺深A(yù)測(cè),可配置。收集器盡自己最大努力高概率實(shí)現(xiàn)目標(biāo)但不是必然,它會(huì)是硬實(shí)時(shí)。因此名稱是收集器。運(yùn)行不同使用獨(dú)立的收集器。 原文出處:G1 – Garbage First G1設(shè)計(jì)的一個(gè)重要目標(biāo)是設(shè)置stop-the-world階段的持續(xù)時(shí)長(zhǎng)和頻率,因?yàn)槔占骺深A(yù)測(cè),可配置。事實(shí)上,G1是一款軟實(shí)時(shí)的收集器,意味著你...

    missonce 評(píng)論0 收藏0
  • 【J2SE】java并發(fā)編程實(shí)戰(zhàn) 讀書筆記( 一、、三章)

    摘要:發(fā)布的對(duì)象內(nèi)部狀態(tài)可能會(huì)破壞封裝性,使程序難以維持不變性條件。不變性線程安全性是不可變對(duì)象的固有屬性之一??勺儗?duì)象必須通過安全方式來發(fā)布,并且必須是線程安全的或者有某個(gè)鎖保護(hù)起來。 線程的優(yōu)缺點(diǎn) 線程是系統(tǒng)調(diào)度的基本單位。線程如果使用得當(dāng),可以有效地降低程序的開發(fā)和維護(hù)等成本,同時(shí)提升復(fù)雜應(yīng)用程序的性能。多線程程序可以通過提高處理器資源的利用率來提升系統(tǒng)的吞吐率。與此同時(shí),在線程的使用...

    QLQ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<