日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...

發布時間:2023/12/19 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[Java教程]【JAVA并發編程實戰】12、使用condition實現多線程下的有界緩存先進先出隊列

0 2016-11-29 17:00:10 package cn.study.concurrency.ch14;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 使用condition作為掛起線程的信號 * 這個是先進先出的隊列 * @author xiaof * * @param */public class ConditionBoundedBuffer { protected final Lock lock = new ReentrantLock(); //數據隊列長度 private static final int BUFFER_SIZE = 1024; //建立兩個condition,一個代表不為空,一個代表不滿 private final Condition notFull = lock.newCondition(); private final Condition notEmpty = lock.newCondition(); private final T[] items = (T[]) new Object[BUFFER_SIZE]; private int tail, head, count; public void put(T x) throws InterruptedException { lock.lock();//這里在進行操作的時候上鎖 try { while(count == items.length) { //如果是滿的就掛起線程,等待變為notFull notFull.await(); } items[tail] = x; //判斷是否是已經達到了滿隊列的情況 if(++tail == items.length) tail = 0; //計數值++ ++count; //插入數據,隊列肯定不是空的,那么進行非空信號發布 notEmpty.signal(); } finally{ //執行完畢,切記一定要解鎖 lock.unlock(); } } //獲取數據,阻塞直到隊列中有數據為止 public T take() throws InterruptedException { lock.lock();//進行操作之前,先上鎖 try { while(count == 0) { //如果隊列中沒有數據,那么就要進行現場掛起 notEmpty.await(); } //得到數據,用來返回 T t = items[head]; items[head] = null;//吧輸出出去的數據設為空 if(++head == items.length) head = 0; //重置隊里索引 --count; //計數減一 notFull.signal();//喚醒插入操作,因為獲取出去一個數據,那么隊列就一定有空位 return t; } finally { //切記在執行完畢之后,不論成功與否,都要解鎖 lock.unlock(); } } }

本文網址:http://www.shaoqun.com/a/266899.html

*特別聲明:以上內容來自于網絡收集,著作權屬原作者所有,如有侵權,請聯系我們:admin@shaoqun.com。

JAVA

0

總結

以上是生活随笔為你收集整理的java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。