日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程打印_线程知识回顾

發布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程打印_线程知识回顾 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、程序_進程_線程

2、在 Java 中創建線程的兩種方式

1) 繼承 Thread

2) 實現 Runnable 接口

3、線程的生命周期

4、同步與死鎖---過多的同步就會導致死鎖

1) 同步方法:同步監視器為當前對象 this

2) 同步代碼塊:(同步監視器/共享資源的對象){

}

5、線程間的通信

1) wait()

2) notify()

3) notifyAll()

6、案例

編寫兩個線程,一個線程打印 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,創建打印類對象,創建兩個線程類對象,啟動線程。

共享資源Printer類:

public class Printer {private int index = 1;//用于統計第幾次打印public synchronized void print(int num) {while(index % 3 == 0) {try {//進入阻塞狀態this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.print(num);index++;//喚醒在Printer這個對象上的所有等待線程this.notifyAll();}public synchronized void print(char letter) {while(index % 3 != 0) {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.print(letter);index++;this.notifyAll();} }

線程代理NumberPrinter類:

public class NumberPrinter implements Runnable{private Printer printer;public NumberPrinter(Printer printer) {this.printer = printer;}@Overridepublic void run() {for (int i = 1; i <= 52; i++) {printer.print(i);}} }

線程代理類LetterPrinter類:

public class LetterPrinter implements Runnable{private Printer printer;public LetterPrinter(Printer printer) {this.printer = printer;}@Overridepublic void run() {for(char i = 'A';i <= 'Z';i++) {printer.print(i);}} }

測試類:

public class Test {public static void main(String[] args) {//(1)創建貢獻資源對象Printer printer = new Printer();//(2)創建代理類,并啟動線程NumberPrinter np = new NumberPrinter(printer);LetterPrinter lp = new LetterPrinter(printer);new Thread(np).start();new Thread(lp).start();} }

尚學堂百戰程序員

百戰程序員_IT6000集_影響6000萬學習IT的中國人【官網】

總結

以上是生活随笔為你收集整理的线程打印_线程知识回顾的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。