同步代码块如何进行同步(线程)

package cn.java;

public class RunnableDemo4 {

public static void main(String[] args) {
    Produce p = new Produce();
    Productor pr = new Productor(p);
    Saler s = new Saler(p);

    Thread th1 = new Thread(pr);
    Thread th2 = new Thread(s);
    th1.start();
    th2.start();


}

}
//产品
class Produce{
private int id;
private String name;
private boolean flag = false;

public Produce() {
}
public Produce(int id, String name) {
    this.id = id;
    this.name = name;
}
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public boolean isFlag() {
    return flag;
}
public void setFlag(boolean flag) {
    this.flag = flag;
}

}
//生产者
class Productor implements Runnable{
private Produce p;
private int pid=1;

public Productor(Produce p) {
    this.p = p;
}

@Override
public void run() {
    //负责生产
    while(true){
        synchronized (p) {
            if(p.isFlag()){
                //不生产产品
                //Thread.sleep(200);//sleep只释放cpu不释放锁
                try {
                    p.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }else{
                p.setId(pid++);
                p.setName("小钢炮");
                System.out.println("生产:"+p.getName()+p.getId());
                p.setFlag(true);
                p.notify();
            }
        }

    }

}

}
//销售者

class Saler implements Runnable{
private Produce p;

public Saler(Produce p) {
    this.p = p;
}

@Override
public void run() {
    while(true){
        synchronized (p) {
            if(!p.isFlag()){
                //没有可销售的产品
                try {
                    p.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }else{
                System.out.println("卖:"+p.getName()+p.getId());
                p.setFlag(false);
                p.notify();//唤醒一个线程
            }
        }
    }

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值