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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值