Java两个线程交替执行-笔记

如有错误或不妥,欢迎批评指正,谢谢 

package com.newandroid.www.demo2;

/**
 * 首先,注意,首先要明确,明确!:
 * wait(),notify(),notifyAll(),这几个方法只能被同步监听锁对象来调用,
 * 即:线程们所共同操作的那个对象,而不是线程自己调用这些方法。
 * 因为这些方法都是非静态的,所以要有线程们所共同操作的那个对象。
 *
 * 1.调用被操作对象的wait会使当前线程进入等待状态,从字面可以看出是等待的意思,
 * 当有线程调用被操作对象的notify或者notifyAll的方法时,再次恢复工作状态
 *
 * 2.下面的简单的demo中,标志位flag的作用是,防止线程1和线程2同时进入wait()状态,
 * 不然就都在等待而不会工作了。
 */

public class Test3 {
    static Test3 test3 = new Test3();
    private  boolean flag = true;
    public static void main(String[] args)  {

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    test3.method1();
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    test3.mothod2();
                }
            }
        }).start();
    }

    public synchronized void method1(){

        try {
            //flag为true的时候输出,

            if (!flag){
                this.wait();
            }

            flag = false;//将flag置为false,是为了方便线程2被唤醒后开始工作,不然线程2还会被wait()
            System.out.println("Thread111111111111");

            this.notify();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public synchronized void mothod2(){
        try {
            //flag为false的时候输出,
            if(flag){
                this.wait();
            }

            flag = true;//将flag置为true,是为了方便线程1被唤醒后开始工作,不然线程1还会被wait()
            System.out.println("Thread2222222222222222222222222222222222222222222222");
            this.notify();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

参考博客:https://www.cnblogs.com/ysocean/p/6896219.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值