交叉输出字符串A或B,各输出若干次

 1 public class DBTools {
 2 
 3     private volatile boolean flag = false;
 4 
 5     public synchronized void backupA(){
 6         try {
 7             while(flag){    //当为true阻塞
 8                 this.wait();
 9             }
10 
11             for (int i = 0; i < 5; i ++){
12                 System.out.println("AAAAAAAA");
13             }
14 
15             flag = true;
16             this.notifyAll();
17         } catch (InterruptedException e) {
18             e.printStackTrace();
19         }
20     }
21 
22     public synchronized void backupB(){
23         try {
24             while(!flag){    //当为false阻塞
25                 this.wait();
26             }
27 
28             for (int i = 0; i < 5; i ++){
29                 System.out.println("BBBBBBBB");
30             }
31 
32             flag = false;
33             this.notifyAll();
34         } catch (InterruptedException e) {
35             e.printStackTrace();
36         }
37     }
38 }
 1 public class ThreadA extends Thread{
 2 
 3     private DBTools dbTools;
 4 
 5     public ThreadA(DBTools dbTools){
 6         this.dbTools = dbTools;
 7     }
 8 
 9     @Override
10     public void run() {
11         dbTools.backupA();
12     }
13 }
 1 public class ThreadB extends Thread{
 2 
 3     private DBTools dbTools;
 4 
 5     public ThreadB(DBTools dbTools){
 6         this.dbTools = dbTools;
 7     }
 8 
 9     @Override
10     public void run() {
11         dbTools.backupB();
12     }
13 }
 1 public class Run {
 2 
 3     public static void main(String[] args) {
 4         DBTools tools = new DBTools();
 5         for (int i = 0; i < 10; i ++){
 6             ThreadA a = new ThreadA(tools);
 7             a.start();
 8 
 9             ThreadB b = new ThreadB(tools);
10             b.start();
11         }
12     }
13 }

备注:来源于书籍(高洪岩)Java多线程编程核心技术-177页

posted @ 2021-06-22 12:51  文所未闻  阅读(61)  评论(0编辑  收藏  举报