线程打印_线程知识回顾
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的中國人【官網】
總結
以上是生活随笔為你收集整理的线程打印_线程知识回顾的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flutter图片点击跳转_使用Flut
- 下一篇: 美商海盗船推出新款 OLED 显示器,支