一 當多個執行緒需要協同完成一件事時,可以加鎖+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...