博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA实现简单的阻塞队列
阅读量:4216 次
发布时间:2019-05-26

本文共 2997 字,大约阅读时间需要 9 分钟。

package org.poi;import java.util.Stack;public class BlockQueue
{ // push的锁 private final static Object pushLock = new Object(); // pop的锁 private final static Object popLock = new Object(); // 存储数据 private Stack
stack; public BlockQueue() { stack = new Stack<>(); } public synchronized void push(T t) { int MAX_SIZE = 3; if (stack.size() >= MAX_SIZE) { // 超过了最大长度,那么就等待 System.out.println("wait"); pushLock(); } System.out.println("push"); stack.push(t); System.out.println(stack.size()); // 解开pop的锁 popUnlock(); } public T pop() { System.out.println("pop"); if (stack.size() == 0) { // 不能pop,那么就等待 popLock(); } T t = stack.pop(); // 解开push的锁 pushUnlock(); return t; } // push锁 private void pushLock() { synchronized (pushLock) { System.out.println("pushLock"); try { pushLock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } // 解开push锁 private void pushUnlock() { synchronized (pushLock) { System.out.println("pushUnlock"); pushLock.notify(); } } // pop锁 private void popLock() { synchronized (popLock) { try { popLock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } // 解开pop锁 private void popUnlock() { synchronized (popLock) { System.out.println("popUnlock"); popLock.notify(); } } public static void main(String[] args) { BlockQueue
blockQueue = new BlockQueue(); blockQueue.push("1"); blockQueue.push("2"); blockQueue.push("3"); blockQueue.push("4"); Thread thread1 = new Thread(); Thread thread2 = new Thread(); Thread thread3 = new Thread(); thread1.start(); }}
package org.poi;public class ThreadDemo extends Thread {    BlockQueue
queue; public ThreadDemo(BlockQueue
queue) { this.queue = queue; } int i = 1; @Override public void run() { queue.push(i++ +""); try { sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } queue.pop(); } public static void main(String[] args) { BlockQueue
queue = new BlockQueue<>(); ThreadDemo demo1 = new ThreadDemo(queue); demo1.setName("t-1"); ThreadDemo demo2 = new ThreadDemo(queue); demo2.setName("t-2"); ThreadDemo demo3 = new ThreadDemo(queue); demo3.setName("t-3"); ThreadDemo demo4 = new ThreadDemo(queue); demo4.setName("t-4"); demo1.start(); demo2.start(); demo3.start(); demo4.start(); }}

 

转载地址:http://xatmi.baihongyu.com/

你可能感兴趣的文章
leetcode136. Single Number
查看>>
leetcode187. Repeated DNA Sequences
查看>>
leetcode166. Fraction to Recurring Decimal
查看>>
leetcode36.Valid Sudoku
查看>>
leetcode85 maximal rectangle
查看>>
2016年半年计划~
查看>>
推荐系统简述(1)基于内容的推荐系统
查看>>
leetcode 149. Max Points on a Line
查看>>
python 小练习之山寨版markdown格式txt文件转html文件
查看>>
python小练习
查看>>
leetcode26. [Array]Remove Duplicates from Sorted Array
查看>>
leetcode 27. [Array]Remove Element
查看>>
leetcode66.[Array] Plus One
查看>>
leetcode283. [Array]Move Zeroes My Submissions Question
查看>>
leetcode292.[Array] Nim Game
查看>>
推荐系统简述(2)基于近邻推荐方法
查看>>
leetcode171.[math] Excel Sheet Column Number
查看>>
决策树知识点整理
查看>>
支持向量机知识点整理
查看>>
机器学习面试题
查看>>