wait,notify实现两个线程交替打印

Posted tanyunlong_nice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wait,notify实现两个线程交替打印相关的知识,希望对你有一定的参考价值。

package 

/**
 * Created by on 2017/10/10.
 */
public class ThreadTest 


    public static void main(String[] args) 

        final flag flag = new flag();

        final AddPrint addPrint = new AddPrint();

        Thread A = new Thread(new Runnable() 
            @Override
            public void run() 

                //addPrint.printA();

                addPrint.print(flag);

            
        );


        Thread B = new Thread(new Runnable() 
            @Override
            public void run() 

                //addPrint.printB();

                addPrint.print(flag);


            
        );

        A.start();

        B.start();
    



class AddPrint 

    private  static  Object o = new Object();//锁

    public void print(flag f)

        synchronized (o)
            for (int i = 1; i < 50; i++) 
                if (f.isShouldRun()) 
                    //shouldRun = false;
                    f.setShouldRun(false);
                    o.notify();
                    if (i < 49) 
                        try 
                            System.out.print("A" + i+",");
                            o.wait();
                         catch (InterruptedException e) 
                            e.printStackTrace();
                        
                    
                else 
                    f.setShouldRun(true);
                    o.notify();
                    if (i < 49) 
                        try 
                            System.out.print("B" + i+",");
                            o.wait();
                         catch (InterruptedException e) 
                            e.printStackTrace();
                        
                    

                
            


        


    


//    public void printA() 
//
//       synchronized (o)
//           for (int i = 1; i < 50; i++) 
//               if (shouldRun) 
//                   shouldRun = false;
//                   o.notify();
//                   if (i < 49) 
//                       try 
//                           System.out.println("A" + i);
//                           o.wait();
//                        catch (InterruptedException e) 
//                           e.printStackTrace();
//                       
//                   
//
//               
//           
//
//       
//
//    
//
//
//    public void printB()
//
//        synchronized (o)
//
//            for (int j= 1; j < 50; j++) 
//                if (!shouldRun) 
//                    shouldRun = true;
//                    o.notify();
//                    if (j < 49) 
//                        try 
//                            System.out.println("B" + j);
//                            o.wait();
//                         catch (InterruptedException e) 
//                            e.printStackTrace();
//                        
//                    
//
//                
//            
//
//        
//
//
//    








class flag

    volatile  boolean shouldRun = true;//标记

    public boolean isShouldRun() 
        return shouldRun;
    

    public void setShouldRun(boolean shouldRun) 
        this.shouldRun = shouldRun;
    


以上是关于wait,notify实现两个线程交替打印的主要内容,如果未能解决你的问题,请参考以下文章

经典笔试题:两个线程交替打印奇偶数

java多线程:结合多线程交替打印10次abc实例,对wait/notify使用的彻底理解

头条面试题之实现两个线程轮流打印字符串

线程通信

java多线程 更优雅的实现线程同步:交替打印AB LockSupport实现

java线程之间通信,多种方式实现生产者消费者模式