多執行緒 LeetCode 交替列印FooBar

2021-10-03 11:08:04 字數 1382 閱讀 7924

我們提供乙個類:

class

foobar

}public

void

bar()}

}

兩個不同的執行緒將會共用乙個 foobar 例項。其中乙個執行緒將會呼叫 foo() 方法,另乙個執行緒將會呼叫 bar() 方法。

請設計修改程式,以確保 「foobar」 被輸出 n 次。

示例 1:

輸入: n = 1

輸出: 「foobar」

解釋: 這裡有兩個執行緒被非同步啟動。其中乙個呼叫 foo() 方法, 另乙個呼叫 bar() 方法,「foobar」 將被輸出一次。

示例 2:

輸入: n = 2

輸出: 「foobarfoobar」

解釋: 「foobar」 將被輸出兩次。

class

foobar

public

void

foo(runnable printfoo)

throws interruptedexception

// printfoo.run() outputs "foo". do not change or remove this line.

printfoo.

run();

bar_ =

true

; foo_ =

false

; object.

notifyall()

;}}}

public

void

bar(runnable printbar)

throws interruptedexception

// printbar.run() outputs "bar". do not change or remove this line.

printbar.

run();

foo_ =

true

; bar_ =

false

; object.

notifyall()

;}}}

}

class

foobar

void

foo(function<

void()

> printfoo)

}void

bar(function<

void()

> printbar)}}

;

執行緒交替列印

建立三個執行緒,a執行緒列印10次a,b執行緒列印10次b,c執行緒列印10次c,要求執行緒同時執行,交替列印10次abc。這個問題用object的wait notify 就可以很方便的解決。主要的思想就是,為了控制執行的順序,必須要先持有prev鎖,也就前乙個執行緒要釋放自身物件鎖,再去申請自身物...

C 使用多執行緒交替列印1 10

使用多執行緒交替列印1 10,執行緒1列印奇數,執行緒2列印偶數,有兩種方式實現,一種是使用訊號量 即互斥鎖 另一種是不使用互斥量,人為控制number的讀寫。以下為個人想法,可能有錯誤 這是乙個面試很常見的題目,要求交替列印,使用互斥量的原理很簡單,就是確保乙個執行緒在對number進行操作的時候...

面試題 多執行緒交替列印

這兩天在知乎上看到不同的人都問了這個問題,回想起當年找實習的時候也寫過這個問題,覺得還蠻有意思的,就在這裡記錄一下。最常見的是使用notify wait public class demo private static class printer extends thread override pu...