博客
关于我
多线程设置flag标志位实现同步
阅读量:434 次
发布时间:2019-03-06

本文共 1677 字,大约阅读时间需要 5 分钟。

信号灯解决同步问题

我尽量注释了代码,可以很容易理解了。

package Thread;/** * 信号灯 * 借助标志位 */public class FlagThread {    public static void main(String[] args) {        Bread bread=new Bread();        new Producer(bread).start();        new Consume(bread).start();    }}class Consume extends Thread{    Bread bread;    public Consume(Bread bread) {        super();        this.bread = bread;    }    @Override    public void run() {        for(int i=1;i<100;++i) {            bread.consume();        }    }}class Producer extends Thread{    Bread bread;    public Producer(Bread bread) {        super();        this.bread = bread;    }    @Override    public void run() {        for(int i=1;i<100;++i) {            bread.produce();        }    }}//资源//同步方法要放在资源里,没有交点不会相互唤醒class Bread{    //为T表示面包在生产,为F表示可以消费了    boolean flag;//标志位,定义在需要被操控的类里面    public Bread() {//构造方法初始化flag=true        flag=true;    }    public synchronized void produce(){//同步方法用来操控生产        if(!this.flag) {//如果标志位为false,生产者等待            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }//如果标志位为true,那就生产,生产之后吧flag设置为false        System.out.println(Thread.currentThread ().getName ()+"正在生产······");//这是这句话的临界资源        this.flag=!this.flag;        this.notifyAll();    }    public synchronized void consume(){        if(this.flag) {//如果flag为真,说明没有面包,需要等待            try {                this.wait();            } catch (InterruptedException e) {                e.printStackTrace();            }        }//否则等待        System.out.println(Thread.currentThread ().getName ()+"正在消费·····");        this.flag=!this.flag;        this.notifyAll();    }}

转载地址:http://cenyz.baihongyu.com/

你可能感兴趣的文章
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
netty代理
查看>>
Netty入门使用
查看>>
netty入门,入门代码执行流程,netty主要组件的理解
查看>>
Netty原理分析及实战(一)-同步阻塞模型(BIO)
查看>>
Netty原理分析及实战(三)-高可用服务端搭建
查看>>
Netty原理分析及实战(二)-同步非阻塞模型(NIO)
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>
Netty发送JSON格式字符串数据
查看>>
Netty和Tomcat的区别已经性能对比
查看>>
Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍
查看>>
Netty基础—1.网络编程基础一
查看>>
Netty基础—1.网络编程基础二
查看>>
Netty基础—2.网络编程基础三
查看>>
Netty基础—2.网络编程基础四
查看>>
Netty基础—3.基础网络协议一
查看>>
Netty基础—3.基础网络协议二
查看>>
Netty基础—4.NIO的使用简介一
查看>>