第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

關(guān)于Java多線(xiàn)程遇到的問(wèn)題.

關(guān)于Java多線(xiàn)程遇到的問(wèn)題.

元芳怎么了 2019-03-20 17:19:20
1.最近在學(xué)習(xí)Java多線(xiàn)程,看到視頻中要實(shí)現(xiàn)一個(gè)類(lèi)似鬧鐘和小明的情景, 要求鬧鐘響,小明關(guān)鬧鐘, 三秒后鬧鐘再響,小明再關(guān), 重復(fù)10次程序結(jié)束. 不知道為什么我的程序小明只能輸出一次.public class Test {    public static void main(String[] args) {        Clock ck = new Clock();        new XiaoMing(ck);    }}public class Clock implements Runnable{    public Boolean isAlarm;    public Boolean shutdown;    public Clock() {        isAlarm = false;        shutdown = false;        new Thread(this).start();    }    @Override    public void run() {        for (int i = 0; i < 10; i++) {            isAlarm = true;            System.out.println("Get up * 3 !");            synchronized (this) {                notifyAll();                try {                    wait(3000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }        shutdown = true;    }}public class XiaoMing implements Runnable{    private Clock clk;    public XiaoMing(Clock clk) {        this.clk = clk;        new Thread(this).start();    }    @Override    public void run() {        while(true) {            if (clk.isAlarm) {                System.out.println("Woshixiaoming!");                clk.isAlarm = false;                synchronized (this) {                    try {                        wait();                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }            else{                if(clk.shutdown)    break;            }        }    }}輸出結(jié)果如下Get up * 3 !Woshixiaoming!Get up * 3 !Get up * 3 !...(10 次 Getup, 之后程序停在那里)
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

這是因?yàn)槟銢](méi)有理解到wait(),notify(),notifyAll()這三個(gè)方法的真正作用,它們不是控制的所有線(xiàn)程,而是所對(duì)象的線(xiàn)程。
也就是說(shuō),XiaoMing 的同步鎖里調(diào)用的 wait() 方法阻塞的是 XiaoMing 這個(gè)線(xiàn)程;Clock 的同步鎖喚醒的是 Clock 類(lèi)的對(duì)象的線(xiàn)程,所以 XiaoMing 的對(duì)象的線(xiàn)程就一直阻塞下去了
可以修改 XiaoMing 類(lèi)run()方法的同步鎖

@Override

    public void run() {

        while(true) {

            if (clk.isAlarm) {

                System.out.println("Woshixiaoming!");

                clk.isAlarm = false;

                synchronized (this.clk) {

                    try {

                        this.clk.wait();

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                }

            }

            else{

                if(clk.shutdown)    break;

            }

        }

    }

這樣 XiaoMing 的線(xiàn)程會(huì)因?yàn)?code>clk域被阻塞,直到Clock的線(xiàn)程調(diào)用notifyAll()

查看完整回答
反對(duì) 回復(fù) 2019-04-17
  • 1 回答
  • 0 關(guān)注
  • 575 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)