java用同步锁来做高并发简单案例

这个案例是生产者和消费这,还有店员,那么店员是介于生产者和消费中间人。他工作是吧钱结算清除,把产品卖给客户

class Productor implements Runnable{//开始第一步
    private Clerk c1;//开始第3步,开始直接用声明变量的方式,声明Clerk,因为他是要共享的类。只是做了声明,但是里面是空的。啥东西都没有的。没有地址的。

    public Productor(Clerk c1){//第4步同样,声明完毕后,要能接收,进行主程序开始调用的时候,进行方便接入。
        this.c1=c1;//这里声明后,肯定要把它赋值,问题是从谁身上赋值呢?本身是一个类。所以要从外部进行赋值。
    }

    @Override
    public void run() {//开始第一步




        while(true){

                System.out.println("生产商开始生产");
                c1.addProduct();//开始第2步,难点这边如何去调用共享数据这个呢?



        }
    }

}

class Clerk{//开始第一步
    private int produNum=0;//开始第2步

    //属性的修改都是通过方法来做。!!!!!!!!!!!!!!!!!!!

    public Clerk() {
    }



    public int getProduNum() {
        return produNum;
    }

    public void setProduNum(int produNum) {
        this.produNum = produNum;
    }

    public synchronized void addProduct(){

        if (produNum<20){
            produNum++;//开始第2步
            System.out.println(Thread.currentThread().getName()+"生产者增加到产品为"+produNum);
            this.notify();

        }else if(produNum>=20){
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }
    public synchronized void minProduct(){


        if (produNum<=0) {
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }

        }else{
            produNum--;//开始第2步
            System.out.println(Thread.currentThread().getName()+"消费者吃掉产品为"+produNum);
            this.notify();
        }


    }

}

class Customer implements Runnable{//开始第一步

    private Clerk c1;

    public Customer(Clerk c1) {
        this.c1 = c1;
    }

    @Override
    public void run() {//开始第一步
        while(true){//开始第2步
            System.out.println("开始吃掉产品");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            c1.minProduct();//开始第2步


        }
    }

}

package com.sgg.Threadcommunication.exer1;

public class produceandcomsusion {
    public static void main(String[] args) {

        Clerk c1=new Clerk();
        Productor p=new Productor(c1);
        Customer c=new Customer(c1);


        Thread t1=new Thread(p);
        Thread tt1=new Thread(p);
        Thread tt2=new Thread(p);
        Thread tt3=new Thread(p);
        Thread tt21=new Thread(p);
        Thread tt31=new Thread(p);
        Thread t2=new Thread(c);

        t1.setName("我是生产者1");
        t1.setName("我是生产者2");
        tt2.setName("我是生产者3");
        tt3.setName("我是生产者4");
        tt21.setName("我是生产者31");
        tt31.setName("我是生产者41");
        t2.setName("我是消费者");
        t1.start();
        t2.start();
        tt1.start();
        tt2.start();
        tt3.start();
        tt21.start();
        tt31.start();



    }
}

这是简单案例做分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
├─第一阶段 │      源码+ppt.rar │      高并发编程第一阶段01讲、课程大纲及主要内容介绍.wmv │      高并发编程第一阶段02讲、简单介绍什么是线程.wmv │      高并发编程第一阶段03讲、创建并启动线程.mp4 │      高并发编程第一阶段04讲、线程生命周期以及start方法源码剖析.mp4 │      高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │      高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │      高并发编程第一阶段07讲、策略模式在Thread和Runnable中的应用分析.mp4 │      高并发编程第一阶段08讲、构造Thread对象你也许不知道的几件事.mp4 │      高并发编程第一阶段09讲、多线程与JVM内存结构的关系,虚拟机栈实验.mp4 │      高并发编程第一阶段10讲、Thread构造函数StackSize详细讲解.mp4 │      高并发编程第一阶段11讲、Thread构造函数StackSize详细讲解-续.mp4 │      高并发编程第一阶段12讲、Daemon线程的创建以及使用场景分析.mp4 │      高并发编程第一阶段13讲、线程ID,优先级讲解.mp4 │      高并发编程第一阶段14讲、Thread的join方法详细介绍,结合一个典型案例.mp4 │      高并发编程第一阶段15讲、Thread中断Interrupt方法详细讲解.mp4 │      高并发编程第一阶段16讲、采用优雅的方式结束线程生命周期.mp4 │      高并发编程第一阶段17讲、Thread API综合实战,编写ThreadService实现暴力结束线程的综合实战.mp4 │      高并发编程第一阶段18讲、数据同步的引入与Synchronized的简单介绍.mp4 │      高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │      高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │      高并发编程第一阶段21讲、通过实验分析This的存在.mp4 │      高并发编程第一阶段22讲、通过实验分析Class的存在.mp4 │      高并发编程第一阶段23讲、多线程死分析,案例介绍.mp4 │      高并发编程第一阶段24讲、线程间通信快速入门,使用wait和notify进行线程间的数据通信.mp4 │      高并发编程第一阶段25讲、多Produce多Consume之间的通讯导致出现程序假死的原因分析.mp4 │      高并发编程第一阶段26讲、多线程下的生产者消费者模型,以及详细介绍notifyAll方法.mp4 │      高并发编程第一阶段27讲、wait和sleep的本质区别是什么,深入分析(面试常见问题).mp4 │      高并发编程第一阶段28讲、线程生产者消费者的综合实战结合Java8语法.mp4 │      高并发编程第一阶段29讲、如何实现一个自己的显式Lock精讲上.mp4 │      高并发编程第一阶段30讲、如何实现一个自己的显式Lock精讲下(让具备超时功能).mp4 │      高并发编程第一阶段31讲、如何给你的应用程序注入钩子程序,Linux下演示.mp4 │      高并发编程第一阶段32讲、如何捕获线程运行期间的异常.mp4 │      高并发编程第一阶段33讲、ThreadGroup API介绍之一.mp4 │      高并发编程第一阶段34讲、ThreadGroup API介绍之二.mp4 │      高并发编程第一阶段35讲、线程池原理与自定义线程池.mp4 │      高并发编程第一阶段36讲、自定义个简单的线程池并且测试.mp4 │      高并发编程第一阶段37讲、给线程池增加拒绝策略以及停止方法.mp4 │      高并发编程第一阶段38讲、给线程池增加自动扩充线程数量,以及闲时自动回收的功能.mp4 │      高并发编程第一阶段39讲、课程结束,内容回顾,下季内容预告.mp4 │ ├─第二阶段 │       Java并发编程.png │       ppt+源码.rar │       高并发编程第二阶段01讲、课程大纲及主要内容介绍.wmv │       高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │       高并发编程第二阶段03讲、介绍三种高效优雅的Singleto

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值