線程通信機(jī)制-創(chuàng)新互聯(lián)

線程通訊 概念:

多個線程在處理同一個資源,但是處理的動作(線程的任務(wù))卻不相同。?

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè),為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗,各類網(wǎng)站都可以開發(fā),成都品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計,建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價格優(yōu)惠,收費(fèi)合理。線程狀態(tài)
new線程剛被創(chuàng)建,但未并被啟動,還沒被調(diào)用Start()方法
Runnable線程可以在java虛擬器中運(yùn)行的狀態(tài)可能正在運(yùn)行自己代碼,也可能沒有,這取決于操作系統(tǒng)處理器。
Blocked當(dāng)一 個線程試圖獲取一 個對象鎖, 而該對象鎖被其他的線程持有,則該線程進(jìn)入Blocked狀態(tài)
Waiting個線程在等待另一 一個線程執(zhí)行一個(喚醒)動作時,該線程進(jìn)入Waiting狀態(tài)。?
Timed Waiting同waiting狀態(tài),有幾個方法有超時參數(shù),調(diào)用他們將進(jìn)入Timed Waiting狀態(tài)。?

Teminated

因為run方法正常退出而死亡,或者因為沒有捕捉的異常終止了run方法而死亡。

??

等待喚醒機(jī)制 什么是等待喚醒機(jī)制:

等待喚醒機(jī)制就是在一個線程進(jìn)行了規(guī)定操作后,另一個線程就進(jìn)入等待狀態(tài)(wait()),

等待剛剛進(jìn)行規(guī)定操作的線程執(zhí)行完他們的指定代碼后,再將處于等待狀態(tài)的這個線程喚醒(notify());

在有多個線程進(jìn)行等待的時候,如果需要我們可以使用notifyAll()來喚醒所有的等待線程。

等待通知機(jī)制的方法

notify():
通知一個在對象上等待的線程,使其從wait方法喚醒。而喚醒的前提是該線程獲取到了對象的鎖。沒有獲取到的線程依舊處以WAITING狀態(tài)。

notifyAll():
通知所有等待在該對象上的線程。

wait():
調(diào)用該方法的線程進(jìn)入WAITING狀態(tài),只有等待另外線程的通知或被interrupted中斷才會被喚醒。需要注意的是,調(diào)用wait()方法后,會釋放對象的鎖。

圖解

例題——早餐店包子售賣

包子資源類

public class BaoZi {
 
    String name;//包子的名稱
 
    Boolean flag;//包子的狀態(tài)(true表示存在  false 表示不存在)
 
}

早餐店線程

public class ZaoCanDian extends Thread {
    BaoZi baoZi;
 
    //構(gòu)造函數(shù):用來指定線程的名稱和操作資源
    public ZaoCanDian(String name, BaoZi baoZi) {
        super(name);
        this.baoZi = baoZi;
    }
 
    public void run() {
        String threadName = Thread.currentThread().getName();
        int count = 0;
        while (true) {
            synchronized (baoZi) {
                count++;
                if (count >10) {
                    break;
                }
                if (baoZi.flag) {//如果包子存在
                    try {
                        baoZi.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    //如果包子不存在
                    System.out.println(threadName + "開始制作" + baoZi.name);
                    baoZi.flag=true;//更改包子狀態(tài)
                    baoZi.notify();//喚醒同一資源下的其他線程
                }
            }
        }
    }
}

吃貨線程

public class ChiHuo extends Thread{
    BaoZi baoZi;
 
    //構(gòu)造函數(shù):用來指定線程的名稱和操作資源
    public ChiHuo(String name,BaoZi baoZi){
        super(name);
        this.baoZi=baoZi;
    }
    public void run(){
        String threadName=Thread.currentThread().getName();
        int count=0;
        while(true){
            synchronized (baoZi){
                count++;
                if (count>10){
                    break;
                }
                if(baoZi.flag){//如果包子存在
                    System.out.println(threadName+"開始吃"+baoZi.name);
                    baoZi.flag=false;//修改狀態(tài)
                    baoZi.notify();//喚醒其他資源狀態(tài)
                }else{
                    //如果包子不存在
                    try {
                        baoZi.wait();//進(jìn)入等待狀態(tài)
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

早餐店和吃貨間線程的轉(zhuǎn)換

public class ThreadTest {
    public static void main(String[] args) {
        //定義資源對象
        BaoZi baoZi=new BaoZi();
        baoZi.name="韭菜 雞蛋 五花肉 豆腐";
        baoZi.flag=true;
 
        //定義兩個線程,起名字且操作同一對象
        ChiHuo ch=new ChiHuo("空舊黎夢",baoZi);
        ZaoCanDian zcd=new ZaoCanDian("豪華",baoZi);
 
        //啟動線程
        zcd.start();
        ch.start();
    }
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

新聞名稱:線程通信機(jī)制-創(chuàng)新互聯(lián)
文章路徑:http://muchs.cn/article34/iopse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、云服務(wù)器標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化網(wǎng)站制作、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司