线程之(wait,notify)---交替输出数

public class Demo01 implements Runnable{

    TestDemo0102 test;
    public Demo01(TestDemo0102 test){
        this.test=test;
    }
    @Override
    public void run() {    
            
        while(test.count<100){
            synchronized(test){    
                System.out.println(Thread.currentThread().getName()+":"+test.count++);
                
                test.notify();                
                
            }
        }
        if(test.count<100){
            try {
                test.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }    
    
        }    
        
        
    }

}




public class Demo02 implements Runnable{

    TestDemo0102 test;
    public Demo02(TestDemo0102 test){
        this.test=test;
    }
    @Override
    public void run() {        
            
        while(test.count<100){
                synchronized(test){        
                System.out.println(Thread.currentThread().getName()+":"+test.count++);
                test.notify();
                                
            }
        }
        if(test.count<100){
            try {
                test.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }    
        }
            
        
        
    }

}



public class TestDemo0102 {

    int count=0;
    public static void main(String[] args) {
        TestDemo0102 test=new TestDemo0102();
        Demo01 d1=new Demo01(test);
        Demo02 d2=new Demo02(test);
        Thread t1=new Thread(d1);
        Thread t2=new Thread(d2);
        t1.start();
        t2.start();
        
    }

}
发布了19 篇原创文章 · 获赞 1 · 访问量 4911
展开阅读全文

多线程问题:使用两个线程交替打印A和B,使用最大打印次数控制,详见代码。

11-24

多线程问题:使用两个线程交替打印A和B,使用最大打印次数控制,详见代码。 出现的问题是:当运行线程B中的run()方法时,程序没有先while()判断,而是直接进入了while循环体。 ``` /** * 共享资源:打印机 * @author Tangxkun * */ public class Printer { //最大打印次数 private final int MAX_COUNT = 7; //false表示该打印机未打印A,true表示该打印机正在打印A private boolean printingA = false; private int count = 0; public synchronized void printA(){ System.out.print(count++); printingA = true; System.out.print("A-"); notifyAll(); } public synchronized void printB(){ System.out.print(count++); printingA = false; System.out.print("B-"); notifyAll(); } public synchronized void aWaiting() throws InterruptedException{ while(printingA == true){ wait(); } } public synchronized void bWaiting() throws InterruptedException{ while(printingA == false){ wait(); } } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getMAX_COUNT() { return MAX_COUNT; } } ``` ``` /** * 打印A的线程 * @author Tangxkun * */ public class PrintA implements Runnable{ private Printer printer; public PrintA(Printer printer) { super(); this.printer = printer; } @Override public void run() { while(printer.getCount() < printer.getMAX_COUNT()){ printer.printA(); try { printer.aWaiting(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ``` ``` /** * 打印B的线程 * @author Tangxkun * */ public class PrintB implements Runnable{ private Printer printer; public PrintB(Printer printer) { super(); this.printer = printer; } @Override public void run() { while(printer.getCount() < printer.getMAX_COUNT()){ try { printer.bWaiting(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } printer.printB(); } } } ``` ``` /** * 测试代码 * @author Tangxkun * */ public class Test { public static void main(String[] args) { Printer printer = new Printer(); PrintA printA = new PrintA(printer); PrintB printB = new PrintB(printer); Thread threadA = new Thread(printA,"A"); Thread threadB = new Thread(printB, "B"); threadA.start(); threadB.start(); } } ``` 当设置MAX_COUNT=5时,输出结果为:![图片说明](https://img-ask.csdn.net/upload/201711/24/1511526008_687265.png) 当设置MAX_COUNT=6时,输出结果为:![图片说明](https://img-ask.csdn.net/upload/201711/24/1511526014_297881.png) 当设置MAX_COUNT=7时,输出结果为:![图片说明](https://img-ask.csdn.net/upload/201711/24/1511526022_676099.png) 烧脑了半天还是没有找出端倪,所以来请教一下各位大神! 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览