數字和字母交替列印

2022-09-11 09:42:10 字數 1601 閱讀 5369

這曾經是我面試時候的一道程式設計題,使用到了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 解釋...