原创 

java小代码: ReentrantLock生产者消费者 (一对一)

分类:    308人阅读    IT小君  2018-03-05 14:53

源码地址:https://github.com/qxwei/MultiThread

package mutilThreadDemo;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @author Damon
 * @create 2018-03-05 14:31
 **/

public class App3 {

    public static void main(String[] args){
        try {
            PCService service = new PCService();
            PThread p = new PThread(service);
            CThread c = new CThread(service);
            p.start();
            c.start();
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
class PThread extends Thread{
    PCService PService;

    public PThread(PCService p){
        this.PService = p;
    }
    public void run(){
        for(int i=0;i<=10;i++) {
            PService.set();
        }
    }
}
class CThread extends Thread{
    PCService CService;

    public CThread(PCService c){
        this.CService = c;
    }
    public void run(){
        for(int i=0;i<=10;i++) {
            CService.get();
        }
    }
}
class PCService{
    private Lock lock = new ReentrantLock();
    private Condition condition = lock.newCondition();
    private boolean hasValue = false;
    public void set(){
        try {
            lock.lock();
            while (hasValue) {
                condition.await();
            }
            System.out.println("生产了一个产品");
            hasValue = true;
            condition.signal();
        }catch (Exception ex){ex.printStackTrace();}
        finally {
            lock.unlock();
        }
    }
    public void get(){
        try {
            lock.lock();
            while (!hasValue) {
                condition.await();
            }
            System.out.println("消费了一个产品");
            hasValue = false;
            condition.signal();
        }catch (Exception ex){ex.printStackTrace();}
        finally {
            lock.unlock();
        }
    }
}
点击广告,支持我们为你提供更好的服务

HTML5数字产品服务公司网站模板

js+css3抽奖转盘旋转点餐代码

html5图标下拉搜索框自动匹配代码

响应式时尚单品在线商城网站模板

jQuery右端悬浮带返回顶部特效

html5 svg夜空中星星流星动画场景特效

HTML5 Canvas竖直流动线条背景动画特效

HTML5现代家居装潢公司网站模板

网页设计开发公司网站模板

css鼠标跟随文字模糊特效

canvas炫酷鼠标移动文字粒子特效

响应式太阳能能源公司网站模板

html5 canvas进度条圆环图表统计动画特效

中小型创意设计服务公司网站模板

有机水果蔬菜HTML5网站模板

html5 canvas彩色碎片组合球形旋转动画特效

响应式咖啡饮品宣传网站模板

现代时尚家具公司网站模板

css+js实现的颜色渐变数字时钟动画特效

小众时尚单品在线电子商务网站模板

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务