這曾經是我面試時候的一道程式設計題,使用到了j**a中的執行緒相關知識,主要就是通過wait()和notify()兩個方法進行實現。題目大概就是要求1-53數字和a-z26個字母進行交替列印,列印兩個數字後列印乙個字母。
呼叫這幾個方法的前提是需要獲得鎖,也就是需要配合synchronized關鍵字使用。只有當執行wait()方法釋放鎖後,另外乙個被喚醒的執行緒才會繼續的執行**。首選先說明下這兩個方法的作用
wait()方法
wait()的作用是讓當前執行緒進入等待狀態,同時,wait()也會讓當前執行緒釋放它所持有的鎖。直到其他執行緒呼叫此物件的 notify() 方法或 notifyall() 方法,當前執行緒被喚醒(進入「就緒狀態」)
notify()方法
喚醒當前物件上的等待執行緒;notify()是喚醒單個執行緒,選擇是任意性的。而notifyall()是喚醒所有的執行緒。
下面是我對這個題目的**實現:
首先新建乙個列印數字的執行緒。判斷列印兩個數字後,也就是數字是偶數的時候,進行wait()操作。
package然後再建乙個列印字母的執行緒com.test.some.thread.practice.one;
/*** @author: wang_hq
* @date: 2019/3/2 10:57
* @description: */
public
class shuzi extends
thread
@override
public
void
run()
catch
(interruptedexception e)
}//此時先喚醒列印字母的執行緒,讓他準備繼續執行。
obj.notify();}}
}}
package最後是呼叫的主線程com.test.some.thread.practice.one;
/*** @author: wang_hq
* @date: 2019/3/2 10:52
* @description: */
public
class zimu extends
thread
@override
public
void
run()
catch
(interruptedexception e) }}
}}
package最後執行結果為:com.test.some.thread.practice.one;
/*** @author: wang_hq
* @date: 2019/3/2 11:01
* @description: */
public
class
main
}
列印回文數字 字母
1 指定位數的數字型回文,第一種方法是通過判斷每一位數來確定是否是回文,這種方法不夠靈活,如果位數變了,就要修改,如下 列印100到999之間的回文數aba 從100開始迴圈,迴圈內判斷是否符合要求,符合即輸出 num1 100 i 1 while num1 999 獲得百位數值 b num1 10...
執行緒交替列印
建立三個執行緒,a執行緒列印10次a,b執行緒列印10次b,c執行緒列印10次c,要求執行緒同時執行,交替列印10次abc。這個問題用object的wait notify 就可以很方便的解決。主要的思想就是,為了控制執行的順序,必須要先持有prev鎖,也就前乙個執行緒要釋放自身物件鎖,再去申請自身物...
交替列印FooBar
我們提供乙個類 class foobar public void bar 兩個不同的執行緒將會共用乙個 foobar 例項。其中乙個執行緒將會呼叫 foo 方法,另乙個執行緒將會呼叫 bar 方法。請設計修改程式,以確保 foobar 被輸出 n 次。示例 1 輸入 n 1 輸出 foobar 解釋...