国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java中wait(),notify(),notifyAll()方法的使用

seanHai / 460人閱讀

摘要:即調(diào)用任意對(duì)象的方法導(dǎo)致該線程阻塞,該線程不可繼續(xù)執(zhí)行,并且該對(duì)象上的鎖被釋放。將所有等待該對(duì)象的線程全部喚起。

方法簡(jiǎn)介 1. wait()
synchronized (lockObjectA) {
try {
    lockObjectA.wait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

此時(shí),代碼塊中會(huì)釋放對(duì)對(duì)象lockObjectA的鎖定,同時(shí)使lockObjectA進(jìn)行等待,直到有線程調(diào)用了它的notify()或notifyAll()方法,才繼續(xù)將lockObjectA鎖定,并繼續(xù)執(zhí)行下面程序。
即:調(diào)用任意對(duì)象的 wait() 方法導(dǎo)致該線程阻塞,該線程不可繼續(xù)執(zhí)行,并且該對(duì)象上的鎖被釋放。

2. notify()
synchronized (lockObjectA) {
            lockObjectA.notify();
        }

喚醒在等待該對(duì)象同步鎖的線程(只喚醒一個(gè)),在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。
即:調(diào)用任意對(duì)象的notify()方法則導(dǎo)致因調(diào)用該對(duì)象的 wait()方法而阻塞的線程中隨機(jī)選擇的一個(gè)解除阻塞(但要等到獲得鎖后才真正可執(zhí)行)。

3. notifyAll()

將所有等待該對(duì)象的線程全部喚起。

示例
package Test0315;


/**
 * Created by Cesar on 2016/3/15.
 */
public class TestWait extends Thread {
    private static Object lockObjectA = new Object();
    private int key;

    public TestWait(int key) {
        this.key = key;
    }

    @Override
    public void run() {
        if (key == 0) {
            synchronized (lockObjectA) {
                System.out.println(key + "開始等待");
                try {
                    lockObjectA.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(key + "等待結(jié)束");
                System.out.println(key + "成功鎖定A");
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(key + "釋放A");
        } else if (key == 1) {
            synchronized (lockObjectA) {
                lockObjectA.notify();
            }
            System.out.println(key + "釋放了A");
        } else {
            synchronized (lockObjectA){
                System.out.println(3+"鎖定了A");
            }
        }
    }


    public static void main(String[] args) {
        TestWait wait = new TestWait(0);
        wait.setName("Test Wait");
        wait.start();
        System.out.println("主線程休眠開始");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主線程休眠結(jié)束,喚醒開始");
        TestWait wait1 = new TestWait(1);
        wait1.start();

        TestWait wait2 = new TestWait(2);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        wait2.start();
        try {
            wait2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("全部結(jié)束");
    }
}
結(jié)果
主線程休眠開始
0開始等待
主線程休眠結(jié)束,喚醒開始
1釋放了A
0等待結(jié)束
0成功鎖定A
0釋放A
3鎖定了A
全部結(jié)束

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/65633.html

相關(guān)文章

  • Javawait/notify/notifyAll

    摘要:等待一段時(shí)間是否有線程喚醒鎖,如果沒有,超時(shí)自動(dòng)喚醒。隨機(jī)喚醒等待隊(duì)列中的等待同一個(gè)鎖的一個(gè)線程,使這個(gè)線程退出等待隊(duì)列,進(jìn)入可運(yùn)行狀態(tài)。條件隊(duì)列中是處于等待狀態(tài)的線程,等待特定條件為真。在一般情況下,總應(yīng)該調(diào)用喚醒所有需要被喚醒的線程。 方法 java.lang.Object public final native void wait() throws InterruptedExce...

    terasum 評(píng)論0 收藏0
  • JavawaitnotifynotifyAll使用詳解

    摘要:用法中規(guī)定,在調(diào)用者三個(gè)方法時(shí),當(dāng)前線程必須獲得對(duì)象鎖。作用方法作用線程自動(dòng)釋放占有的對(duì)象鎖,并等待。當(dāng)生產(chǎn)者生產(chǎn)了一個(gè)數(shù)據(jù)或者消費(fèi)者消費(fèi)了一個(gè)數(shù)據(jù)之后,使用方法來通知所有等待當(dāng)前對(duì)象鎖的線程,但是一次只會(huì)有一個(gè)等待的線程能拿到鎖。 基礎(chǔ)知識(shí) 首先我們需要知道,這幾個(gè)都是Object對(duì)象的方法。換言之,Java中所有的對(duì)象都有這些方法。 public final native void...

    rozbo 評(píng)論0 收藏0
  • java多線程(7)wait()、notify()和notityALL()

    摘要:已經(jīng)在上面有提到過,和的作用是喚醒正在的線程,是隨機(jī)喚醒線程中的一個(gè),則是喚醒全部。釋放和不釋放鎖在多線程的操作中,鎖的釋放與否是必須要清楚的,是會(huì)釋放鎖,而則不會(huì)。 wait wait方法是Object中的方法,這個(gè)方法的功能特性:1).執(zhí)行wait方法的前提是當(dāng)前線程已經(jīng)獲取到對(duì)象的鎖,也就是wait方法必須在synchronized修飾的代碼塊或者方法中使用。2).執(zhí)行wait之...

    LiuRhoRamen 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)之線程生命周期-wait,notify,notifyall(六)

    摘要:不釋放持有的鎖,釋放鎖。在調(diào)用方法前,必須持有鎖,調(diào)用喚醒,也要持有鎖。休眠一定時(shí)間后,進(jìn)入就緒狀態(tài)。這兩個(gè)都能被方法中斷當(dāng)前狀態(tài)。用法方獲取鎖判斷條件,不滿足繼續(xù)滿足執(zhí)行其他業(yè)務(wù)方獲取鎖改變條件通知為什么是而不是會(huì)一直循環(huán),直到條件滿足。 sleep和wait sleep是Thread類的方法,wait是Object的方法。 sleep可以到處使用,wait必須是在同步方法或者代碼...

    Terry_Tai 評(píng)論0 收藏0
  • [Java并發(fā)-5]用“等待-通知”機(jī)制優(yōu)化循環(huán)等待

    摘要:在這個(gè)等待通知機(jī)制中,我們需要考慮以下四個(gè)要素。何時(shí)等待線程要求的條件不滿足就等待。是會(huì)隨機(jī)地通知等待隊(duì)列中的一個(gè)線程,而會(huì)通知等待隊(duì)列中的所有線程。 由上一篇文章你應(yīng)該已經(jīng)知道,在 破壞占用且等待條件 的時(shí)候,如果轉(zhuǎn)出賬本和轉(zhuǎn)入賬本不滿足同時(shí)在文件架上這個(gè)條件,就用死循環(huán)的方式來循環(huán)等待,核心代碼如下: // 一次性申請(qǐng)轉(zhuǎn)出賬戶和轉(zhuǎn)入賬戶,直到成功 while(!actr.apply...

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

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

0條評(píng)論

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