真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

leetcode多線(xiàn)程之如何解決交替打印FooBar問(wèn)題

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

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、閔行ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的閔行網(wǎng)站制作公司

題目

我們提供一個(gè)類(lèi):

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");
    }
  }
}

兩個(gè)不同的線(xiàn)程將會(huì)共用一個(gè) FooBar 實(shí)例。其中一個(gè)線(xiàn)程將會(huì)調(diào)用 foo() 方法,另一個(gè)線(xiàn)程將會(huì)調(diào)用 bar() 方法。

請(qǐng)?jiān)O(shè)計(jì)修改程序,以確保 "foobar" 被輸出 n 次。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/print-foobar-alternately
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

題解

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來(lái)進(jìn)行條件控制

以上是“l(fā)eetcode多線(xiàn)程之如何解決交替打印FooBar問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


文章標(biāo)題:leetcode多線(xiàn)程之如何解決交替打印FooBar問(wèn)題
轉(zhuǎn)載來(lái)源:http://weahome.cn/article/ggigog.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部