1115. 交替打印FooBar

1115. 交替打印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 次。

  • 示例 1:

輸入: n = 1
輸出: “foobar”
解釋: 這里有兩個線程被異步啟動。其中一個調用 foo() 方法, 另一個調用 bar() 方法,“foobar” 將被輸出一次。

  • 示例 2:

輸入: n = 2
輸出: “foobarfoobar”
解釋: “foobar” 將被輸出兩次。

解題思路

使用reentrantlock使用兩個condition,實現精準喚醒

代碼

    class FooBar {private int n;ReentrantLock r=new ReentrantLock();Condition f= r.newCondition();Condition b=r.newCondition();boolean flag=true;public FooBar(int n) {this.n = n;}public void foo(Runnable printFoo) throws InterruptedException {r.lock();for (int i = 0; i < n; i++) {while (!flag)f.await();// printFoo.run() outputs "foo". Do not change or remove this line.printFoo.run();flag=false;b.signal();}r.unlock();}public void bar(Runnable printBar) throws InterruptedException {r.lock();for (int i = 0; i < n; i++) {while (flag)b.await();// printBar.run() outputs "bar". Do not change or remove this line.printBar.run();flag=true;f.signal();}r.unlock();}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390132.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IntelliJ IDEA 運行 Maven 項目

1.官方文檔說IntelliJ IDEA已經自身集成了maven&#xff0c;則不用勞心去下載maven 2.導入一個程序&#xff0c;看是否是maven程序的關鍵在于工程之中有沒有pom.xml這個文件&#xff0c;比如這里 3.為這個工程配置好服務器3.1 點擊“Edit Configurations”3.2 進入Run/Debug C…

資深老鳥整理,Java接口自動化測試總結,從0到1自動化...

這幾年接口自動化變得越來越熱門&#xff0c;相對比于UI自動化&#xff0c;接口自動化有一些優勢 1&#xff09;運行比UI更穩定&#xff0c;讓BUG更容易定位 2&#xff09;UI自動化維護成本太高&#xff0c;接口相對低一些 接口測試其實有很多方式&#xff0c;主要有兩種&…

parcel react_如何使用Parcel設置React應用

parcel reactFor a long time Webpack was one of the biggest barriers-to-entry for someone wanting to learn React. Theres a lot of boilerplate configuration that can be confusing, especially if youre new to React. 長期以來&#xff0c; Webpack一直是想要學習Re…

1117. H2O 生成

1117. H2O 生成 現在有兩種線程&#xff0c;氧 oxygen 和氫 hydrogen&#xff0c;你的目標是組織這兩種線程來產生水分子。 存在一個屏障&#xff08;barrier&#xff09;使得每個線程必須等候直到一個完整水分子能夠被產生出來。 氫和氧線程會被分別給予 releaseHydrogen 和…

pdf 字體和圖片抽取

2019獨角獸企業重金招聘Python工程師標準>>> #安裝mutoos sudo apt-get install mupdf-tools #抽取字體 mutool extract LTN20180531052_C.pdf 轉載于:https://my.oschina.net/colin86/blog/1842412

推箱子2-向右推!_保持冷靜,砍箱子-銀行

推箱子2-向右推!Hack The Box (HTB) is an online platform allowing you to test your penetration testing skills. It contains several challenges that are constantly updated. Some of them are simulating real world scenarios and some of them lean more towards a …

611. 有效三角形的個數

611. 有效三角形的個數 給定一個包含非負整數的數組&#xff0c;你的任務是統計其中可以組成三角形三條邊的三元組個數。 示例 1: 輸入: [2,2,3,4] 輸出: 3 解釋: 有效的組合是: 2,3,4 (使用第一個 2) 2,3,4 (使用第二個 2) 2,2,3注意: 數組長度不超過1000。數組里整數的范…

python學習day04

一&#xff1a;今天是一個學習列表后的實踐訓練 購物小程序&#xff1a; #codeing:UTF-8 #__author__:Duke #date:2018/3/1/001product_list [(mac,7000),(bike,1000),(phone,2000),(kindle,800),(iwatch,3000), ]; shopping_car []; saving input("please input your …

mybatis多產數_freeCodeCamp杰出貢獻者–我們如何選擇,認可和獎勵多產的志愿者

mybatis多產數freeCodeCamp.org is only possible thanks to the thousands of contributors around the world who help expand and improve the community. They do this mainly through:感謝全球各地成千上萬的貢獻者&#xff0c;他們致力于擴大和改善社區&#xff0c;因此f…

502. IPO

502. IPO 假設 力扣&#xff08;LeetCode&#xff09;即將開始 IPO 。為了以更高的價格將股票賣給風險投資公司&#xff0c;力扣 希望在 IPO 之前開展一些項目以增加其資本。 由于資源有限&#xff0c;它只能在 IPO 之前完成最多 k 個不同的項目。幫助 力扣 設計完成最多 k 個…

記一次打包的詭異現象

一、前情提要&#xff1a; 今天線上打包&#xff0c;發現啟動正常&#xff0c;但是訪問異常&#xff0c;看日志也沒有打印出什么異常信息。 更新的微服務包訪問的時候一直報出【403】&#xff0c;訪問被拒 項目架構&#xff1a;springBoot maven 二、機緣巧合&#xff1a; 上午…

轉載:mysql存儲過程講解

記錄MYSQL存儲過程中的關鍵語法&#xff1a; DELIMITER // 聲明語句結束符&#xff0c;用于區分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 聲明存儲過程 BEGIN …. END 存儲過程開始和結束符號 SET p_in1 變量賦值 DECLARE l_int int unsigned default 4000000; 變…

Diffie-Hellman:安全網絡通信背后的天才算法

Lets start with a quick thought experiment.讓我們從快速思考實驗開始。 You have a network of 3 computers, used by Alice, Bob, and Charlie. All 3 participants can send messages, but just in a way that all other clients who connected to the network can read …

掃盲丨關于區塊鏈你需要了解的所有概念

掃盲丨關于區塊鏈你需要了解的所有概念 如今存儲信息的方式有什么問題&#xff1f; 目前&#xff0c;支配我們生活的數據大部分都儲存在一個地方&#xff0c;不論是在私人服務器、云、圖書館或檔案館的紙上。大多數情況下這很好&#xff0c;但這也容易受到攻擊。 最近有消息稱&…

SpringBoot環境切換

2019獨角獸企業重金招聘Python工程師標準>>> 1.在application.yml中配置&#xff0c;如果java -jar banke-boot-bd-api-0.0.1-SNAPSHOT.jar&#xff0c;那么就是已application-test作為啟動的配置文件啟動 spring: profiles: active: test 2.如果java -jar banke-bo…

linux tar cvf_Linux中的Tar命令:Tar CVF和Tar XVF通過示例命令進行了解釋

linux tar cvfThe name tar is, by most accounts, short for tape archive. The "tapes" in question would be all those magnetic storage drives that were popular all the way back in the 1950s. 在大多數情況下&#xff0c; tar是磁帶歸檔的縮寫。 有問題的“…

1894. 找到需要補充粉筆的學生編號

1894. 找到需要補充粉筆的學生編號 一個班級里有 n 個學生&#xff0c;編號為 0 到 n - 1 。每個學生會依次回答問題&#xff0c;編號為 0 的學生先回答&#xff0c;然后是編號為 1 的學生&#xff0c;以此類推&#xff0c;直到編號為 n - 1 的學生&#xff0c;然后老師會重復…

[No0000B0]ReSharper操作指南1/16-入門與簡介

安裝指南 在安裝之前&#xff0c;您可能需要檢查系統要求。 ReSharper是一個VisualStudio擴展。它支持VisualStudio2010,2012,2013,2015和2017.安裝完成后&#xff0c;您將在VisualStudio的主菜單中找到新的ReSharper條目。大多數ReSharper命令都可以在這個菜單中找到。但是&a…

更改H2元素的顏色

In coding there are often many different solutions to a given problem. This is especially true when it comes to styling an HTML element.在編碼中&#xff0c;對于給定問題通常有許多不同的解決方案。 在樣式化HTML元素時&#xff0c;尤其如此。 One of the easiest …

[CTSC2008]圖騰totem

&#xff08;圖騰這題做的我頭疼 233&#xff09; 記 f(xxxx) 為 xxxx 出現的次數&#xff0c;那么題目就是要求 f(1324) - f(1243) - f(1432) 最有難度的是把上面的式子轉化一下&#xff0c;變成 f(1x2x) - f(14xx) - f(12xx) f(1234) 這點除非對 f 的求法能一眼看出來&#…