【Java】线程锁机制的实例化操作

package comunication;

public class 包子笼 {
    public int pack=100;

    /**
     * 同步方法监视的对象是this
     * @param name
     */
//    public synchronized void eat(String name){
//            System.out.println(name + "吃第" + this.pack + "个包子");
//            this.pack--;
//
//    }
}
package comunication;

//import com.sun.xml.internal.bind.v2.runtime.reflect.Lister;
public class 吃包子的 extends Thread{
    private 包子笼 p=null;
    private  String name=null;
    public 吃包子的(包子笼 p, String name){
        this.p=p;
        this.name=name;
    }
//    public void eat(){
//        synchronized (p){
//                System.out.println(this.name + "吃第" + this.p.pack + "个包子");
//                this.p.pack--;
//            }
//    }
public void run(){
    try {
        while (true) {
            synchronized (p){
            if (this.p.pack <= 0){
                p.notify();
            p.wait();
            }else{
                System.out.println(this.name+"吃第" + this.p.pack + "个包子");
                this.p.pack--;
            }
        }
        Thread.sleep(1);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
}
package comunication;

public class 做包子的 extends Thread {
    private 包子笼 p=null;
    private String name=null;
    public 做包子的(包子笼 p,String name){
        this.p=p;
        this.name=name;
    }
    public void run(){
        try {
            while(true) {
                synchronized (p) {
                    if (p.pack <= 0) {
                        p.pack = 100;
                        System.out.println(this.name + "做好了" + p.pack + "个包子");
                    } else {
                           p.notifyAll();
                           p.wait();
                    }
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

package comunication;

public class 测试吃包子 {
    public static void main(String[] args) {
        包子笼 p=new 包子笼();
        做包子的 m=new 做包子的(p,"王大楚");
        吃包子的 p1=new 吃包子的(p,"张三");
        吃包子的 p2=new 吃包子的(p,"李四");
       p1.start();
       p2.start();
       m.start();
    }
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值