91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

兰溪市| 凉山| 普陀区| 共和县| 庆城县| 芮城县| 宜君县| 皋兰县| 保山市| 青阳县| 静海县| 东明县| 鄂尔多斯市| 湟中县| 吉水县| 蒙山县| 铁岭县| 博白县| 报价| 北安市| 韶山市| 舒兰市| 资溪县| 天全县| 买车| 图们市| 湘潭县| 长葛市| 莒南县| 镇江市| 徐汇区| 大名县| 辽中县| 霍州市| 巢湖市| 永宁县| 正阳县| 台中县| 武山县| 霍山县| 黄山市|