国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

wait,notify,sleep,join和線程同步問題

2019-11-18 11:25:35
字體:
供稿:網(wǎng)友

wait,notify,sleep,join這幾個(gè)方法很常用,這里涉及到多線程和同步問題,這里稍微解釋一下.

1.wait和notify
這兩個(gè)方法都是Object中的方法,放在一塊是因?yàn)樗麄冴P(guān)系非常密切.
wait就是等待這個(gè)對(duì)象的同步鎖,不過調(diào)用這個(gè)方法必須先獲得這個(gè)對(duì)象的同步鎖,就這一點(diǎn)很多人就搞暈了.
這里先解釋一下這兩個(gè)方法,然后給出一個(gè)小例子說明.

wait:等待對(duì)象的同步鎖,需要獲得該對(duì)象的同步鎖才可以調(diào)用這個(gè)方法,否則后收到一個(gè)IllegalMonitorStateException,這個(gè)是運(yùn)行時(shí)異常.調(diào)用這個(gè)方法后,就放棄了這個(gè)同步鎖了.假如不帶參數(shù)的wait方法就只有等別人喚醒了,假如帶一個(gè)參數(shù)的
化就設(shè)置等待最長(zhǎng)時(shí)間,過了這個(gè)時(shí)間即使沒有人喚醒這個(gè)線程也不再等待了.

notify:喚醒在等待該對(duì)象同步鎖的線程(只喚醒一個(gè),假如有多個(gè)在等待),但是notifyAll可以喚醒所有等待的線程,注重喚醒的時(shí)在notify之前wait的線程,之后的沒有效果.

這里舉一個(gè)通俗的例子,兩個(gè)人共有一個(gè)衛(wèi)生間(每次只能一個(gè)人用),他們都要刷牙和方便,他們是這樣約定的,輪流用,第一個(gè)人先刷牙,然后第二個(gè)人刷牙...

class Syn
{
        public static void main(String[] args) throws Exception
        {
            TwoPeople.ONE.start();
            TwoPeople.TWO.start();
        }
}

class TwoPeople extends Thread
{
    PRivate int i=0;
    static Thread ONE=new TwoPeople(1);
    static Thread TWO=new TwoPeople(2);

    static Object washroom=new Object();    
    private TwoPeople(int i){this.i=i;}
    public void run(){
        synchronized(washroom){
            try{
                if(i==1){
                    brush(); //1 
                  washroom.wait(); //2
                    release(); //6   
                    washroom.notify(); //7
                }
            else{
                    brush(); //3
                    washroom.notify(); //4
                    washroom.wait(); //5
                    release(); //8


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 塔城市| 松滋市| 昌宁县| 丘北县| 棋牌| 南岸区| 东乡县| 南靖县| 博兴县| 韩城市| 南开区| 黔西| 壶关县| 新巴尔虎左旗| 达日县| 南部县| 竹溪县| 阿克苏市| 依兰县| 英吉沙县| 牙克石市| 渝中区| 鹿邑县| 莫力| 淮安市| 东方市| 江油市| 康乐县| 察隅县| 沁水县| 民丰县| 奇台县| 西和县| 宜丰县| 兰西县| 嘉黎县| 博湖县| 安宁市| 嘉黎县| 宣恩县| 凌云县|