1.创建Queue.java

public class Queue {

	private LinkedList<Object> list = new LinkedList<Object>() ;

	private final int minSize = 0 ; ;

	private final int maxSize ;

	private AtomicInteger count = new AtomicInteger(0) ;

	public Queue(int size){
this.maxSize = size ;
}
private final Object lock = new Object() ; public void put(Object o){
synchronized(lock){
while(size() == this.maxSize){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
list.add(o) ;
//计数器增加
count.incrementAndGet() ;
//通知唤醒
lock.notify();
}
} private int size(){
return count.get() ;
} public Object take(){
Object res = null ;
synchronized(lock){
while(size() == this.minSize){
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
res = list.removeFirst();
//计数器减1
count.decrementAndGet() ;
lock.notify();
}
return res ; } public static void main(String[] args) { final Queue mq = new Queue(3) ; mq.put("a");
mq.put("b");
mq.put("c"); new Thread(new Runnable() { @Override
public void run() {
mq.put("g");
System.out.println("put1 secceseful");
mq.put("f");
System.out.println("put2 secceseful");
}
}).start(); new Thread(new Runnable() { @Override
public void run() {
System.out.println("take value = "+mq.take() );
}
}).start(); }
}

  运行结果如下:

take value = a
put1 secceseful

  执行第一个put的时候由于队列容量已经满了,所以线程阻塞。另一个线程take之后,阻塞的线程继续执行put成功。

java多线程实现简单队列的更多相关文章

  1. Java 多线程安全问题简单切入详细解析

    线程安全 假如Java程序中有多个线程在同时运行,而这些线程可能会同时运行一部分的代码.如果说该Java程序每次运行的结果和单线程的运行结果是一样的,并且其他的变量值也都是和预期的结果是一样的,那么就 ...

  2. Java多线程——<三>简单的线程执行:Executor

    一.概述 按照<Java多线程——<一><二>>中所讲,我们要使用线程,目前都是显示的声明Thread,并调用其start()方法.多线程并行,明显我们需要声明多个 ...

  3. JAVA多线程(二) 并发队列和阻塞队列

    github代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service/ ...

  4. Java多线程实现简单的售票程序

    设计一个多线程程序如下:设计一个火车售票模拟程序.假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1.要求打印出每个售票点所卖出的票号 2.各售票点 ...

  5. java多线程的简单demo

    模拟场景:顾客买车从车库中取车,厂家生产车,车存储在车库中.买家.厂家对同一个车库中的车操作 一.不加同步机制的代码如下: package com.joysuch.testng.thread; imp ...

  6. Java多线程_阻塞队列

    1.什么是阻塞队列       我们知道,PriorityQueue.LinkedList这些都是非阻塞队列.在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者- ...

  7. Java多线程之简单的线程同步实例

    数据类: package Thread.MyCommon; public class Data { public int num = 0; public synchronized int getEve ...

  8. JAVA多线程实现简单的点名系统

    效果图如下: CMain函数: package com.shubing.main; public class CMain { public static void main(String[] args ...

  9. Java多线程_JUC包下的阻塞队列

    在前面我们提到了阻塞队列,也用过了LinkedBolckingQueue队列了,在这里,我们主要对 ArrayBlockingQueue,PriorityBlockingQueue,DelayQueu ...

随机推荐

  1. 联合权值(codevs 3728)

    Description 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v ...

  2. 聊天程序(基于Socket、Thread)

    聊天程序简述 1.目的:主要是为了阐述Socket,以及应用多线程,本文侧重Socket相关网路编程的阐述.如果您对多线程不了解,大家可以看下我的上一篇博文浅解多线程 . 2.功能:此聊天程序功能实现 ...

  3. 16.1112 模拟考试 T1

    加密[问题描述]有一种不讲道理的加密方法是: 在字符串的任意位置随机插入字符. 相应的,不讲道理的解密方法就是从字符串中恰好删去随机插入的那些字符.给定原文s和加密后的字符串t,求?有多少子串可以通过 ...

  4. gitweb 搭建教程

    1. 前言 git 是一个版本控制工具,类似svn. 本文内容主要涉及git仓库通过浏览器访问(用web的方式去查看git提交历史记录,tag,branch等信息),即gitweb. 效果图: 在这里 ...

  5. pyquery操作

    pyquery和我们之前用的jQuery有着异曲同工之处,使用起来更加方便,基本能满足大部分时候我们的需求. 先引入一个小事例展示pyquery的操作: html = ''' <div> ...

  6. 多线程环境下 cpu % 分析

    1. top -H(查看阻塞进程,线程) 2. jstack  pid(查看堆栈信息) 另附 利用 Java dump 进行 JVM 故障诊断 http://www.blogjava.net/yuwe ...

  7. hdu4888 多校B 最大流以及最大流唯一判断+输出方案

    题意,给一个矩阵,告诉你每行和.每列和,并且限制所填数不大于k,问矩阵是否唯一. 经典建图不说了,第一次遇到判断最大流唯一性的,学习了:用dfs来判断残网中是否还存在环,若存在,则表明绕这个环走一圈, ...

  8. AC日记——租用游艇 洛谷 P1359

    题目描述 长江游艇俱乐部在长江上设置了n 个游艇出租站1,2,…,n.游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇.游艇出租站i 到游艇出租站j 之间的租金为r(i,j),1& ...

  9. T3186 队列练习2 codevs

    http://codevs.cn/problem/3186/ 题目描述 Description (此题与队列练习1相比改了2处:1加强了数据 2不保证队空时不会出队)给定一个队列(初始为空),只有两种 ...

  10. 输出重定向、cat、系统别名、查看指定行、时间戳

    1.touch命令:如果文件不存在则创建,如存在则更新时间戳;2.除了echo有向文件写入内容的功能,cat也可以; cat > hehe # 输出重定向 cat >> hehe # ...