一. Condition 接口

1. Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式。 但是这两者在使用方式以及功能特性上还是有差别的。

2. 支持多个等待队列个数

3. 支持当前线程施放锁并进入等待状态

4. 支持当前线程施放锁并进入等待状态,在等待状态中不响应中断

5. 支持当前线程施放锁并进入超时等待状态

6. 支持当前线程施放锁并进入等待状态到将来的某个时间

7. 支持唤醒等待队列中的一个线程

8. 支持唤醒等待队列中的全部线程

package com.dcz.juc;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; public class BoundedQueue<T> { private Object[] items; // 添加的下标,删除的下标和数组当前数量
private int addIndex, removeIndex, count;
// 重入锁
private Lock lock = new ReentrantLock();
// 空
private Condition notEmpty = lock.newCondition();
// 满
private Condition notFull = lock.newCondition(); // 初始化队列大小
public BoundedQueue(int size) {
items = new Object[size];
} // 添加一个元素,如果数组满,则添加线程进入等待状态,直到有空位
public void add(T t) throws InterruptedException {
lock.lock();
try {
while (count == items.length) {
// 数组满,进入等待状态
notFull.await();
// 入队
items[addIndex] = t;
if (++addIndex == items.length) {
addIndex = 0;
}
++count;
notEmpty.signal();
}
} finally { lock.unlock();
}
} // 由头部删除一个元素,如果数组空,则删除线程进入等待状态,直到有新添加元素
public T remove() throws InterruptedException {
lock.lock();
try {
while(count == 0){
notEmpty.await();
Object o = items[removeIndex];
if(++removeIndex == items.length){
removeIndex = 0;
}
--count;
notFull.signal();
return (T)o;
}
} finally {
lock.unlock();
}
return null;
} }

Java多线程基础知识(四)的更多相关文章

  1. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  2. Java 多线程基础(四)线程安全

    Java 多线程基础(四)线程安全 在多线程环境下,如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线 ...

  3. Java多线程基础知识笔记(持续更新)

    多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...

  4. Java多线程基础知识总结

    2016-07-18 15:40:51 Java 多线程基础 1. 线程和进程 1.1 进程的概念 进程是表示资源分配的基本单位,又是调度运行的基本单位.例如,用户运行自己的程序,系统就创建一个进程, ...

  5. Java多线程基础知识篇

    这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...

  6. JAVA多线程基础知识(一)

    一. 基础知识 要了解多线程首先要知道一些必要的概念,如进程,线程等等.开发多线程的程序有利于充分的利用系统资源(CPU资源),使你的程序执行的更快,响应更及时. 1. 进程,一般是指程序或者任务的执 ...

  7. Java多线程基础知识总结笔记

    本篇笔记记录一些在Java多线程编程中常见的关键字,比较简单和基础的就不写太详细了. 一.Thread类(其实也是应用了Runnable接口)和Runnable接口(只有一个run方法,应用该类必须重 ...

  8. Java多线程基础知识例子

    一.管理 1.创建线程 Thread public class Main { public static void main(String[] args) { MyThread myThread = ...

  9. Java多线程基础知识(二)

    一. Java线程具有6种状态  NEW 初始状态,线程被创建,但是还没有调用start方法. RUNNABLE 运行状态,java线程将操作系统中的就绪和运行两种状态笼统的称作进行中. BLOCKE ...

随机推荐

  1. Altium Designer 15 --- Make LOGO/ICON

    Line frame is created by Rhino(DXF file format)

  2. CSS3自适配手机屏幕

    @media only screen and (max-width:350px){ .img{ width: 80px; height:70px; background-image: url(./im ...

  3. 《JavaScript DOM编程艺术》笔记一

    1.CSS: 继承是CSS技术中的一项强大功能,节点树上的各个元素将继承其父元素的样式属性. 2.3种获取DOM元素方法:getElementById返回一个对象,getElementsByTagNa ...

  4. IOS下自定义click事件使用alert引发的血案

    使用过iscroll插件的同学都知道iscroll支持自定义事件,即在调用iscroll时参数赋值options.click = true. 接下来定义事件如: $clinicAppoint.on(' ...

  5. Behavior Trees

    https://en.wikipedia.org/wiki/Behavior_Trees_(artificial_intelligence,_robotics_and_control) http:// ...

  6. 拍拍装修<a href="" > 搜狐 “兼容模式”下失效,解决办法

    代码 <a href="http://www.baidu.com"> <p style="></p> <p style=&quo ...

  7. JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray

    JSONModel 嵌套字典数组  JSONModel nest NSDictionary NSArray

  8. Quartz.NET总结(二)CronTrigger和Cron表达式

    Quartz.NET的任务调度,主要就是依靠CronTrigger和Cron表达式.Cron是已经在UNIX存在了很长一段时间,它有着强大和可靠的调度能力.CronTrigger类也正是是基于Cron ...

  9. Sql — CTE公用表表达式和With用法总结

    CTE(Common Table Expression) 公用表表达式,它是在单个语句的执行范围内定义的临时结果集,只在查询期间有效.它可以自引用,也可在同一查询中多次引用,实现了代码段的重复利用. ...

  10. Description DisplayName Display的关系

    Description  DisplayName  Display的关系 ?