多執行緒程式設計題

2021-08-28 02:28:22 字數 2159 閱讀 4776

一 當多個執行緒需要協同完成一件事時,可以加鎖+wait,notify一起完成。

1.寫兩個執行緒,乙個執行緒列印1~52,另乙個執行緒列印a~z,列印順序是12a34b...5152z;

思路分析,乙個執行緒列印數字,每次列印兩個數字,26次列印完,另乙個執行緒列印字母,也是26次列印完;可以建立兩個方法,乙個方法列印數字,乙個列印字母;還有建立乙個全域性變數用來控制具體執行的是哪個執行緒;每個方法都被執行26次。

public class twothread 

}}).start();

new thread(new runnable()

}}).start();

}}class myobject1 catch (interruptedexception e)

}system.out.print((2*count-1));

system.out.print(2*count);

flag = false;

this.notify();

}public synchronized void printa() catch (interruptedexception e)

}system.out.print((char)(count+'a'-1));

count++;

flag = true;

this.notify();

}}

2.子執行緒迴圈10次,主線程迴圈100次,然後子執行緒迴圈10次,主線程迴圈100次,這樣迴圈50次;

思路:跟上面那個一樣,也是synchornized+wait,notify方法;難點在於主線程的啟動不需要start方法,因為程式的入口是main方法,在執行這個程式的時候,主線程已經啟動了;

public class submain 

}).start();

for(int i = 0; i<5; i++)

m.main1();

}}class myobject2 catch (interruptedexception e)

}for(int i = 0 ; i<10; i++)

system.out.println();

flag = false;

this.notify();

}public synchronized void main1() catch (interruptedexception e)

}for(int i = 0 ; i<100; i++)

system.out.println();

flag = true;

this.notify();

}}

3.編寫乙個程式,啟動三個執行緒,三個執行緒的id分別是a,b,c;,每個執行緒將自己的id值在螢幕上列印5遍,列印順序是abcabc...

public class threethread extends thread 

}).start();

new thread(new runnable()

}).start();

new thread(new runnable()

}).start();

}}class myobject catch (interruptedexception e)

}system.out.print("a");

flag = 2;

this.notifyall();

}public synchronized void printc() catch (interruptedexception e)

}system.out.println("c");

flag = 1;

this.notifyall();

}public synchronized void printb() catch (interruptedexception e)

}system.out.print("b");

flag = 3;

this.notifyall();

}}

總結,這3個程式的思路都一樣,都是定義乙個物件,將方法都同步,每個方法都用乙個執行緒啟動,物件之間有個全域性變數,執行緒通過全域性變數的設定來控制線程執行順序。

多執行緒程式設計 程式設計題

子執行緒迴圈 10 次,接著主線程迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主線程又迴圈 100 次,如此迴圈50次,試寫出 pthread cond t pcond pthread cond initializer pthread mutex t mutex pthread m...

多執行緒 「等待喚醒」程式設計題

要求 第乙個執行緒 遍歷1 1000所有的數字,在遍歷過程中,如果發現這個數字能同時被2,3,5,7整除,立即wait 等待,讓第二個執行緒進入。第二個執行緒 執行後,將乙個計數器 1,之後再喚醒等待的執行緒。主線程中 休息2秒,讓兩個執行緒全部執行完畢,列印 計數器 的結果。我的 public c...

多執行緒 17 多執行緒題1

1 原始 現有的程式 模擬產生了16個日誌物件,並且需要執行16秒才能列印完這些日誌,請在程式中增加4個執行緒去呼叫parselog 方法來分頭列印這16個日誌物件,程式只需要執行4秒即可列印完這些日誌物件。原始 如下 public class test parselog方法內部的 不能改動 pub...