1114. 按序打印

1114. 按序打印

我們提供了一個類:

public class Foo {
public void first() { print(“first”); }
public void second() { print(“second”); }
public void third() { print(“third”); }
}
三個不同的線程 A、B、C 將會共用一個 Foo 實例。

一個將會調用 first() 方法
一個將會調用 second() 方法
還有一個將會調用 third() 方法
請設計修改程序,以確保 second() 方法在 first() 方法之后被執行,third() 方法在 second() 方法之后被執行。

  • 示例 1:

輸入: [1,2,3]
輸出: “firstsecondthird”
解釋:
有三個線程會被異步啟動。
輸入 [1,2,3] 表示線程 A 將會調用 first() 方法,線程 B 將會調用 second() 方法,線程 C 將會調用 third() 方法。
正確的輸出是 “firstsecondthird”。

  • 示例 2:

輸入: [1,3,2]
輸出: “firstsecondthird”
解釋:
輸入 [1,3,2] 表示線程 A 將會調用 first() 方法,線程 B 將會調用 third() 方法,線程 C 將會調用 second() 方法。
正確的輸出是 “firstsecondthird”。

解題思路

簡單使用信號量,完成有序運行

代碼

class Foo {Semaphore f=new Semaphore(1);Semaphore s=new Semaphore(0);Semaphore t=new Semaphore(0);public Foo() {}public void first(Runnable printFirst) throws InterruptedException {f.acquire();// printFirst.run() outputs "first". Do not change or remove this line.printFirst.run();s.release();}public void second(Runnable printSecond) throws InterruptedException {s.acquire();// printSecond.run() outputs "second". Do not change or remove this line.printSecond.run();t.release();}public void third(Runnable printThird) throws InterruptedException {t.acquire();// printThird.run() outputs "third". Do not change or remove this line.printThird.run();f.release();}
}

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

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

相關文章

2018年應用交付控制器市場將發生重大變化

應用交付控制器(ADC)一直以來都是基礎設施的關鍵部分。它們位于應用程序和基礎架構之間,是唯一可以同時使用應用程序和網絡語言的技術。IT行業正在經歷一個快速的現代化進程,包含諸如軟件定義的網絡、云、容器等其他計劃對基礎設施…

如何測試一個水杯

關于一個水杯如何測試?這個被認為是測試界最為經驗的面試題了,下面是我的回答思路: 對于一個軟件的測試,重點是測試的思路以及測試的全面性的體現。 軟件測試應該先重點再次重點,對于軟件而言重點自然在于功能測試&…

1115. 交替打印FooBar

1115. 交替打印FooBar 我們提供一個類&#xff1a; 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 實例。其中…

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;然后老師會重復…