package com.originalityTest; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; import org.s…
阻塞队列 线程1往阻塞队列添加元素[生产者] 线程2从阻塞队列取出元素[消费者] 当队列空时,获取元素的操作会被阻塞 当队列满时,添加元素的操作会被阻塞 阻塞队列的优势:在多线程领域,发生阻塞时,线程被挂起,条件满足时,被挂起的线程自动被唤醒.使用阻塞队列,不需要关心什么时候需要阻塞线程(开发效率差,可能存在线程不安全的误操作),阻塞队列这种数据结构可以自动控制. 源码架构:BlockingQueue有多个实现类,下面列举7个常用的. ArrayBlockingQueue:由数组组成的有界阻塞队…
package com.gh.thread; /** * 生产者和消费者案例 * wait和sleep的区别 * wait不让出监视器锁,sleep让出监视器的锁 * @author ganhang * */ /** * 生产者 * @author ganhang * */ class Producter implements Runnable{ private Food food; public Producter(Food food){ this.food=food; } @Override…
/* * 生产者和消费者案例 */ public class TestProductorAndConsumer { public static void main(String[] args) { Clerk clerk = new Clerk(); Productor pro = new Productor(clerk); Consumer cus = new Consumer(clerk); new Thread(pro, "生产者 A").start(); new Thread(…
显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代内置锁的方法, 而是当内置锁不适用时,作为一种可选择的高级功能. ②ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性. 但相较于 synchronized 提供了更高的处理锁的灵活性. TestLock package com.aff…
Condition对象 一).Condition的定义 Condition对象:与锁关联,协调多线程间的复杂协作. 获取与锁绑定的Condition对象: Lock lock = new ReentrantLock(); Conndition condition = lock.newConndition(); Condition的方法: await(): 使当前的线程等待并释放锁. singalAll(): 唤醒所有等待的线程,只有一个线程重新获得锁,并执行. awaitterruptibly(…
原文:http://www.cnblogs.com/dolphin0520/p/3932906.html 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦.但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一…
原文连接:(http://www.studyshare.cn/blog-front//blog/details/1167/0 ) 一.队列及阻塞队列概念 1.队列:是一种特殊线性表,特殊之处在于操作是受限制的,只允许在表的前端进行删除操作,在表的后端进行插入操作.进行删除操作的端为对列头,进 行插入操作的端为队列尾.插入一个元素称之为入队,删除一个元素称为出队,最先插入的元素最先出队,因此队列是一个先进先出的线性表. 2.阻塞队列:所谓阻塞队列,就是阻塞队列中有元素并且队列已经满了的时候,其他线…
1:BlockingQueue的继承关系 java.util.concurrent 包里的 BlockingQueue是一个接口, 继承Queue接口,Queue接口继承 Collection BlockingQueue----->Queue-->Collection BlockingQueue即阻塞队列,它是基于ReentrantLock 2:核心方法 BlockingQueue 具有 4 组不同的方法用于插入.移除以及对队列中的元素进行检查.如果请求的操作不能得到立即执行的话,每个方法的表…
小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某个任务,然而,如果主进程认为自己的事情一旦做完了就没有必要使用子进程了,就可以将子进程设置为守护进程 例如:在运行qq的过程,开启一个进程,用于下载文件,然而文件还没有下载完毕,qq就退出了,下载任务也应该跟随qq的退出而结束. from multiprocessing import Process…