1. java中實現runnable介面多線程技術,用五個線程,生成100個1到1000的隨機數
在Java中,使用Runnable介面實現多線程技術,可以有效提高程序的並發處理能力。下面是一個簡單的例子,通過創建五個線程,每個線程生成1到1000之間的隨機數。
我們定義了一個名為Main的類,其中包含一個靜態變數num,用於計數隨機數的生成次數。在main方法中,我們創建了五個Thread對象,每個線程實例化了RandomRunnable類的一個實例,並啟動了它們。
RandomRunnable類實現了Runnable介面,擁有一個名為name的字元串變數和一個run方法。run方法中包含了生成隨機數的邏輯。通過調用Main類的add方法,每個線程可以向控制台輸出隨機數。
Main類中定義了add方法,用於在控制台列印隨機數。add方法中使用了synchronized關鍵字,確保在同一時間只有一個線程能夠訪問和修改num變數,避免了線程間的數據競爭。
此外,我們還定義了getNum方法,用於獲取當前的計數值。通過這種方式,每個線程可以判斷是否需要生成新的隨機數。
通過這種方式,我們可以有效地利用多線程技術,在多個線程之間分配任務,提高程序的執行效率。
需要注意的是,雖然這個例子展示了如何使用Runnable介面創建多線程,但實際應用中還需要考慮線程安全和其他並發問題,以確保程序的穩定性和可靠性。
通過這個簡單的例子,我們可以了解如何使用Java的多線程技術,實現並發程序設計。希望這個例子能夠幫助大家更好地理解和應用多線程編程。
在實際開發過程中,我們還可以通過增加更多的線程或者優化演算法來進一步提高程序的並發性能。同時,還需要注意線程之間的通信和同步問題,以確保程序的正確性和高效性。
總之,Java中的多線程技術為程序開發提供了強大的支持。通過合理地設計和實現多線程程序,我們可以充分利用計算機的多核處理能力,提高程序的運行效率。
最後,希望這個例子能夠為大家提供一些啟示和幫助。如果有任何問題或者需要進一步的幫助,請隨時提問。謝謝大家!
2. 基礎Java題 試編寫一個多線程的程序:啟動4個線程。其中兩個循環10次,每次將某全局變數加1,另兩個循環1
publicclassDay18_A{
publicstaticvoidmain(String[]args)throwsInterruptedException{
Recounrec=Recoun.getRec();
Thread[]trr=newThread[4];
for(inti=0;i<4;i++){
trr[i]=newThread(newNumberTest(rec,i),"線程"+(i+1)+": ");
}
for(Threadthread:trr){
thread.start();
}
for(Threadthread:trr){
thread.join();
}
System.out.println("所有線程結束查看結果:"+rec.getCount());
}
}
{
privateRecounre;
privateintn;
NumberTest(Recounr,inti){
this.re=r;
this.n=i;
}
publicvoidrun(){
for(inti=0;i<10;i++){
re.method(n);
}
}
}
classRecoun{
privateintcount=0;
privateRecoun(){
}
privatestaticfinalRecounrec=newRecoun();
publicstaticRecoungetRec(){
returnrec;
}
publicsynchronizedvoidmethod(inti){
if(i%2==0){
System.out.println(Thread.currentThread().getName()+(count++));
}else{
System.out.println(Thread.currentThread().getName()+(count--));
}
}
publicsynchronizedintgetCount(){
returncount;
}
}
3. java三線程猜數問題
importjava.util.Random;
publicclassGuessNumber{
publicstaticvoidmain(String[]args){
ThreadOneone=newThreadOne();
one.start();
ThreadTwotwo=newThreadTwo("猜題線程1");
two.start();
ThreadTwothree=newThreadTwo("猜題線程2");
try{
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
three.start();
while(true){
//如果有猜對的就停止所有線程
if(two.getGuessResult().equals("猜對了")||three.getGuessResult().equals("猜對了")){
one.stop();
two.stop();
three.stop();
break;
}
}
}
}
//出題線程
classThreadOneextendsThread{
privatestaticinttheNumber;//存放要猜的數字
publicvoidrun(){
Randomrandom=newRandom();
theNumber=random.nextInt(100);
System.out.println("出題線程出的題為:"+theNumber);
}
//猜數字
publicstaticStringguessNumber(intnumber){
if(theNumber>number){
return"小了";
}elseif(theNumber<number){
return"大了";
}else{
return"猜對了";
}
}
}
//猜題線程
classThreadTwoextendsThread{
privateStringthreadName;
privateintminNum=0;
privateintmaxNum=100;
StringguessResult="";
publicThreadTwo(StringthreadName){
this.threadName=threadName;
}
publicStringgetGuessResult(){
returnguessResult;
}
publicvoidrun(){
while(true){
try{
sleep(4000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
intnowNum;
Randomrandom=newRandom();
//生成最小值和最大值之間的一個數
nowNum=minNum+random.nextInt(maxNum-minNum);
//把生成的數發到出題線程上,返回結果
guessResult=ThreadOne.guessNumber(nowNum);
if(guessResult.equals("大了")){
maxNum=nowNum;
System.out.println(threadName+"猜:"+nowNum+""+guessResult);
}elseif(guessResult.equals("小了")){
minNum=nowNum;
System.out.println(threadName+"猜:"+nowNum+""+guessResult);
}else{
System.out.println(threadName+"猜對了,結果是:"+nowNum);
}
}
}
}
4. java線程安全問題,筆試題幫忙給個思路。
1、兩個線程,一個線程執行開門操作,一個線程執行關門操作,並都進行同步處理(synchronized)
2、假如在開門期間,按下按鈕,剛開門線程wait, 並notify關門線程開始run, 同理在關門期間,如果
按下按鈕,則關門線程wait, 並notify開門線程執行
3、有一個注意的地方,每當在開門或關門期間按下按鈕的時候,都要記錄開門或關門最後一刻的狀態值,以便在下次執行時,開門的從上一次關門最後一刻的狀態開始執行,而關門的則上一個開門的最後一刻狀態開始執行。個人見解。。。