亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java線程的應用場景有哪些

發布時間:2021-11-23 10:39:54 來源:億速云 閱讀:154 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“java線程的應用場景有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java線程的應用場景有哪些”這篇文章吧。

解決生產者,消費者存在問題,可使用如下方法(代碼示例包含):

1.  解決數據同步問題:使用同步代碼塊;

2. 解決重復問題:

    加入等待與喚醒機制-->由Object類提供方法:

等待:public final void wait() throws InterruptedException

喚醒第一個等待線程:public final void notify();

喚醒全部等待線程:public final void notifyAll();

代碼示例:

**
 * 生產者消費者實體
 * YangKuo 2018/11/15 18:21
 */
public class Info {

    private String title;

    private String content;

    /**
     * flag=true 表示可以生產,但不能取走
     * flag=false 表示不能生產,可以取走
     */
    private Boolean flag = true;

    public synchronized void setInfo(String title, String content) throws InterruptedException {
        if (!flag) {//此時不能夠進行生產,等待取走
            super.wait();
        }
        Thread.sleep(100);
        this.title = title;
        this.content = content;
        flag = false;//生產完成
        super.notify();

    }

    public synchronized void getInfo() throws InterruptedException {
        if (flag) {//此時應該生產,不應該取走
            super.wait();//等待
        }
        Thread.sleep(100);
        System.out.println(this.title + "----->" + this.content);
        flag = true;//消費完成
        super.notify();
    }

}

/**
 * 生產者
 * YangKuo 2018/11/15 18:26
 */
public class Producer implements Runnable {

    private Info info;

    public Producer(Info info) {
        this.info = info;
    }

    @Override
    public void run() {
        for (int x = 0; x < 50; x++) {
            if (x % 2 == 0) {
                try {
                    info.setInfo("張三","一個帥哥");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } else {
                try {
                    info.setInfo("小白兔","一個可愛的小動物");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

/**
 * 消費者
 * YangKuo 2018/11/15 18:26
 */
public class Customer implements Runnable {

    private Info info;

    public Customer(Info info) {
        this.info = info;
    }

    @Override
    public void run() {
        for (int x = 0; x < 50; x++) {
            try {
                info.getInfo();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

/**
 * 生產者,消費者測試
 * YangKuo 2018/11/15 18:35
 */
public class Test {

    public static void main(String args[]) {
        Info info = new Info();
        Producer p = new Producer(info);
        Customer c = new Customer(info);
        new Thread(p).start();
        new Thread(c).start();
    }
}

補充:wait()與Sleep方法的區別

wait(): Object類定義的方法,表示線程要等待執行,必須通過notify(),notifyAll()方法喚醒

Sleep(): 是Thread類定義的方法,在休眠到一定時間后將自己喚醒。

以上是“java線程的應用場景有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大石桥市| 长武县| 台湾省| 无锡市| 东阳市| 扎兰屯市| 交城县| 湖北省| 汾阳市| 迭部县| 泌阳县| 普兰店市| 福泉市| 西盟| 望奎县| 恩平市| 格尔木市| 永和县| 木兰县| 诸暨市| 卫辉市| 砀山县| 光山县| 蒙城县| 平定县| 本溪| 营山县| 浦县| 苍山县| 洪洞县| 秦安县| 钟祥市| 太仓市| 墨玉县| 金堂县| 宁波市| 工布江达县| 吉安县| 体育| 福清市| 大新县|