第十一章程式設計作業
1). 設計一個多執行緒的程式如下:設計一個火車售票模擬程式。假如火車站要有100張火車票要賣出,現在有5個售票點同時售票,用5個執行緒模擬這5個售票點的售票情況。
package cn.whb.test11;
public class Work1 {
public static void main(String[] args) {
SoleToken s = new SoleToken(100);
new Thread(s,"視窗一").start();
new Thread(s,"視窗二").start();
new Thread(s,"視窗三").start();
new Thread(s,"視窗四").start();
new Thread(s,"視窗五").start();
}
}
class SoleToken implements Runnable {
private int tokenCount;
public SoleToken(int tokenCount) {
this.tokenCount = tokenCount;
}
public void run() {
while(tokenCount>0) {
SoleVotes();
}
}
private void SoleVotes() {
if(tokenCount<=0) {
return;
}
synchronized(this) {
if(tokenCount<=0) {
return;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"出售了第"+(tokenCount--)+"張票");
}
}
}
2). 編寫兩個執行緒,一個執行緒列印1-52的整數,另一個執行緒列印字母A-Z。列印順序為12A34B56C….5152Z。即按照整數和字母的順序從小到大列印,並且每列印兩個整數後,列印一個字母,交替迴圈列印,直到列印到整數52和字母Z結束。
要求
:
1 . 編寫列印類Printer,宣告私有屬性index,初始值為1,用來表示是第幾次列印。
2 . 在列印類Printer中編寫列印數字的方法print(int i),3的倍數就使用wait()方法等待,否則就輸出i,使用notifyAll()進行喚醒其它執行緒。
3 . 在列印類Printer中編寫列印字母的方法print(char c),不是3的倍數就等待,否則就列印輸出字母c,使用notifyAll()進行喚醒其它執行緒。
4 . 編寫列印數字的執行緒NumberPrinter繼承Thread類,宣告私有屬性private Printer p;在構造方法中進行賦值,實現父類的run方法,呼叫Printer類中的輸出數字的方法。
5 . 編寫列印字母的執行緒LetterPrinter繼承Thread類,宣告私有屬性private Printer p;在構造方法中進行賦值,實現父類的run方法,呼叫Printer類中的輸出字母的方法。
6 . 編寫測試類Test,建立列印類物件,建立兩個執行緒類物件,啟動執行緒。
package cn.whb.test11;
public class Test {
public static void main(String[] args) {
Printer p = new Printer();
new NumberPrinter(p).start();
new LetterPrinter(p).start();
}
}
class Printer{
private int index=1;
public synchronized void print(int i) {
if(index%3==0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(i);
index++;
if(index%3==0) { // 防止本來還是輸出數字,但卻把輸出字母的執行緒喚醒
notifyAll();
}
}
public synchronized void print(char c) {
if(index%3!=0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(c);
index++;
notifyAll();
}
}
class NumberPrinter extends Thread{
public NumberPrinter(Printer p) {
this.p = p;
}
private Printer p;
public void run() {
for(int i=1;i<=52;i++) {
p.print(i);
}
}
}
class LetterPrinter extends Thread{
private Printer p;
public LetterPrinter(Printer p) {
this.p = p;
}
public void run() {
for(int i=0;i<26;i++) {
p.print((char)('A'+i));;
}
System.out.println();
}
}
3). 編寫多執行緒程式,模擬多個人通過一個山洞的模擬。這個山洞每次只能通過一個人,每個人通過山洞的時間為5秒,有10個人同時準備過此山洞,顯示每次通過山洞人的姓名和順序。
package cn.whb.test11;
public class Work3 {
public static void main(String[] args) {
CrossCave cave = new CrossCave();
for(int i=1;i<=10;i++) {
new Thread(cave,"遊客"+i).start();
}
}
}
class CrossCave implements Runnable{
private int index=1;
public void run() {
cross();
}
private synchronized void cross() {
System.out.println("第"+(index++)+"個通過山洞的人為"+Thread.currentThread().getName());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
相關文章
- Java併發程式設計 - 第十一章 Java併發程式設計實踐Java程式設計
- 高階語言程式設計第十次作業程式設計
- 《Python程式設計》第十一章部分課後練習題Python程式設計
- 高階語言程式設計課程第十次作業程式設計
- 高階語言程式設計第十次個人作業程式設計
- JS高階程式設計第十一章.個人學習筆記JS程式設計筆記
- C primer plus 第六版 第十一章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十二題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十三題 程式設計練習答案程式設計
- 高階程式語言設計課程第十次個人作業
- 高階語言程式設計課程第十次個人作業程式設計
- C primer plus 第六版 第十一章 第十一題題 程式設計練習答案程式設計
- 《UNIX環境高階程式設計》(APUE) 筆記第十一章 - 執行緒程式設計筆記執行緒
- 程式設計作業——系統管理程式設計
- 《Java8實戰》-第十一章筆記(CompletableFuture:組合式非同步程式設計)Java筆記非同步程式設計
- 高階語言程式設第十次個人作業
- Python 第一週程式設計作業Python程式設計
- C primer plus 第六版 第十一章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第九題 程式設計練習答案程式設計
- Java程式設計第二章作業Java程式設計
- C語言程式設計B作業04C語言程式設計
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- 嵌入式作業6.2 ADC 程式設計程式設計
- 《程式是怎樣跑起來的》第十一章
- java程式設計思想第一章Java程式設計
- 第十週-雲端計算運維作業運維
- 高階語言程式設計課程第十次個人作業(102400106劉鑫語)程式設計
- 第十一次作業
- 第十四次作業