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

溫馨提示×

溫馨提示×

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

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

leetcode多線程之如何解決交替打印FooBar問題

發布時間:2021-12-15 11:30:21 來源:億速云 閱讀:163 作者:小新 欄目:大數據

小編給大家分享一下leetcode多線程之如何解決交替打印FooBar問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

題目

我們提供一個類:

class FooBar {
  public void foo() {
    for (int i = 0; i < n; i++) {
      print("foo");
    }
  }

  public void bar() {
    for (int i = 0; i < n; i++) {
      print("bar");
    }
  }
}

兩個不同的線程將會共用一個 FooBar 實例。其中一個線程將會調用 foo() 方法,另一個線程將會調用 bar() 方法。

請設計修改程序,以確保 "foobar" 被輸出 n 次。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/print-foobar-alternately
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

題解

class FooBar {
    private int n;

    ReentrantLock lock = new ReentrantLock();
    Condition fooCnd = lock.newCondition();
    Condition barCnd = lock.newCondition();

    boolean foo = true;

    public FooBar(int n) {
        this.n = n;
    }

    public void foo(Runnable printFoo) throws InterruptedException {
        
        lock.lock();
        try {
            for (int i = 0; i < n; i++) {
                if (!foo) {
                    fooCnd.await();
                }
                foo = false;
        	    // printFoo.run() outputs "foo". Do not change or remove this line.
        	    printFoo.run();
                barCnd.signal();
            }
        } finally {
            lock.unlock();
        }
    }

    public void bar(Runnable printBar) throws InterruptedException {
        
        lock.lock();
        try {
            for (int i = 0; i < n; i++) {
                if (foo) {
                    barCnd.await();
                }
                foo = true;
                // printBar.run() outputs "bar". Do not change or remove this line.
        	    printBar.run();
                fooCnd.signal();
            }
        } finally {
            lock.unlock();
        }
    }
}
  • 這里使用ReentrantLock的condition來進行條件控制

以上是“leetcode多線程之如何解決交替打印FooBar問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

河池市| 巴中市| 镇江市| 安乡县| 普定县| 余庆县| 辽宁省| 青海省| 华坪县| 磐安县| 宁远县| 南安市| 红原县| 金昌市| 井研县| 沙河市| 剑川县| 永和县| 宜丰县| 安仁县| 县级市| 根河市| 左权县| 蒙城县| 大连市| 永年县| 沙湾县| 富民县| 天门市| 巴彦淖尔市| 集安市| 孙吴县| 霍州市| 台北县| 会同县| 嘉善县| 综艺| 万宁市| 芮城县| 潮州市| 离岛区|