lock线程同步

//今天有朋友问了我就写出来给大家看看

package fuck;

/*
* 用来测试lock锁哇哈哈哈
*/
public class Suo3{
public static void main(String[] args){
ACG15 a=new ACG15();
}
}
//新建一个产品类ACG15
class ACG15{

private int id =1;

private String name;

private boolean flag = false;

private int pid = 1;

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;
}
//结论函数方法民小写,类名大写
public void so(){

    if(this.isFlag()){

    }else{
        //this.setId(++id);//id=(this.id = this.id+1)
        //this.setId(id++);//id = this.id this.id = this.id+1
        //当前面的结果被否决掉后,就通过else执行下面的程序id的++是为小钢炮的增加做铺垫
        id++;
        //set和get方法一个是输入值,一个是输出值,这里的this是这样的同步函数的创建不都是用的当前实例吗,也就是用的自己
        this.setName("小钢炮");
        //当前面的语句被否决掉后开始执行生产小钢炮的语句这里就是具体的生产方式
        System.out.println("生产:"+this.getName()+this.getId());
        //这里的返回值跟上面if(this.isFlag())是有直接相关关系的
        //仔细的这个地方是核心,在我看来是特别重要的地方,原来我们初始化isFlag的值是false而if语句只会执行true语句
        //当前面 的语句被否决掉后说明没有产品了,对不对,因为没有产品了才会通过else运行到下面的生产语句来是不是,而返回的true
        //会让函数再一次的执行
        this.setFlag(true);
    }
}

public void xo(){

    if(!this.isFlag()){

    }else{
        //这里之所以没有this.setName是因为上面的生产方法已经给值了我们直接调用就可以了
        System.out.println("卖:"+this.getName()+this.getId());
        //此处为精华所在如上面 if(!this.isFlag())
        //这里的false运行结果是反馈给if(!this.isFlag()),这样多的由于原来的运行方式给的值是它的相反就是true
        //当我们的函数方法经过else运行到下面之后反馈给上面if(!this.isFlag())的值就是false,这就代表下面的语句
        //已经执行了,也就是说东西卖出去了,没有东西或者说值不是true(生产商没有提供)程序就不会执行了
        this.setFlag(false);
    }
}

}
//线程Yang
//生产者,负责调用生产函数方法
class Yang implements Runnable
{ //按照我的理解就是后面的传值做铺垫,
private ACG15 a;
//
public Yang(ACG15 a){

    this.a=a;
}
//这个地方我们要通过构造参数的形式来调取产品
@Override
public void run() {
    // TODO Auto-generated method stub
    while(true){
        a.so();
    }
}

}
//线程Wang
//消费者,负责调用消费生产的函数方法
class Wang implements Runnable
{
private ACG15 a;
public Wang(ACG15 a){
this.a=a;
}
//这个地方我们要通过构造参数的形式来调取产品
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
a.xo();
}
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值