博客
关于我
多线程设置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 添加索引,删除索引及其用法
查看>>
mysql 状态检查,备份,修复
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>
MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
查看>>
mysql 用户管理和权限设置
查看>>
MySQL 的 varchar 水真的太深了!
查看>>
mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
查看>>
MySQL 的instr函数
查看>>
MySQL 的mysql_secure_installation安全脚本执行过程介绍
查看>>
MySQL 的Rename Table语句
查看>>
MySQL 的全局锁、表锁和行锁
查看>>
mysql 的存储引擎介绍
查看>>
MySQL 的存储引擎有哪些?为什么常用InnoDB?
查看>>
Mysql 知识回顾总结-索引
查看>>
Mysql 笔记
查看>>
MySQL 精选 60 道面试题(含答案)
查看>>
mysql 索引
查看>>
MySQL 索引失效的 15 种场景!
查看>>