博客
关于我
多线程设置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/

你可能感兴趣的文章
MySQL篇(管理工具)
查看>>
mysql类型转换函数convert与cast的用法
查看>>
mysql系列一
查看>>
MySQL系列之数据类型(Date&Time)
查看>>
MySQL系列之数据类型(Date&Time)
查看>>
Mysql系列之锁机制
查看>>
Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)...
查看>>
MySql系列:[4200][1140]In aggregated query without GROUP BY, expression #2 of SELECT list contains nona
查看>>
MySQL索引
查看>>
Mysql索引
查看>>
mysql索引
查看>>
mysql索引
查看>>
Mysql索引,索引的优化,如何避免索引失效案例
查看>>
Mysql索引、命令重点介绍
查看>>
mysql索引、索引优化(这一篇包括所有)
查看>>
Mysql索引一篇就够了
查看>>
MySQL索引一篇带你彻底搞懂(一次讲清实现原理加优化实战,面试必问)
查看>>
MySQL索引下沉:提升查询性能的隐藏秘
查看>>
MySql索引为什么使用B+树
查看>>
MySQL索引为什么是B+树
查看>>