java多线程同步和通信

java多线程之间互斥的一种方式是使用sychronized来修改被多线程访问的代码;
而线程之间进行同步有序的进行时,可以使用wait(),notify()方法来实现
例如:子线程运行10次,主线程运行100次,子线程运行10次,主线程在运行100次,循环共50次。

package com.thread;

/**
 * @Author madongxu
 * @Date 2018-04-23
 *
 * 线程同步和互斥
 */
public class TraditionalSynchronizedDemo {

    public static void main(String[] args) {

        final Business business = new Business();

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i =1;i<=5;i++){
                    business.sub(i);
                }
            }
        });
        thread.start();

        for(int j =1;j<=5;j++){
            business.main(j);
        }
    }

   static class Business{
        //子线程先执行
        boolean subShould = true;

        public synchronized void  sub(int i ){
            while (!subShould){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //执行子线程逻辑
            for (int a = 1; a < 10;a++){
                System.out.println("sub thread run.."+a+"loop of"+i);
            }

            subShould=false;
            this.notify();
        }


        public synchronized void main(int i){
            while(subShould){
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //执行住线程逻辑
            for(int b = 1;b < 20;b++){

                System.out.println("main thread run.."+b+" loop of "+i);

            }
            subShould=true;
            this.notify();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值