(1)wait() / notify()方法 (2)await() / signal()方法 (3)BlockingQueue阻塞队列方法 (4)PipedInputStream / PipedOutputStream 本文只介绍最常用的前三种,第四种暂不做讨论 第一种:BlockingQueue阻 ...
分类:
编程语言 时间:
2018-06-03 21:40:50
阅读次数:
178
阻塞队列是 java.util.concurrent 包提供的一个类,该类提供了多线程中通过队列实现安全高效的数据处理的功能。 所谓阻塞队列,是在普通队列基础上实现了阻塞线程的功能: 队列为空时,获取元素的线程阻塞,直到队列变为非空。 当队列满时,存储元素的线程阻塞,直到队列可用(非满)。 以下是阻 ...
分类:
其他好文 时间:
2018-05-23 14:59:48
阅读次数:
208
execute方法示意图如上,workers为HashSet类型,存储初始化任务RUNNING或SHUTDOWN但firsttask为null的worker。 workQueue为BlockingQueue,存储提交的执行任务。 ...
分类:
编程语言 时间:
2018-05-20 13:02:28
阅读次数:
147
使用多线程以及线程池的意义无需多说,要想掌握线程池,最好的方法还是自己手动去实现。 一、实现思路 (网络盗图) 总的来说,所有的任务在BlockingQueue中进行等待,由Worker进行具体的操作,Worker才是真正的工作线程。 二、代码 1、线程池类 2、Task类(需要被线程处理的任务类) ...
分类:
编程语言 时间:
2018-05-18 01:22:17
阅读次数:
262
BlockingQueue位于JDK5新增的concurrent包中,它很好地解决了多线程中,如何高效安全地“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。 阻塞队列,顾名思义,它首先它是一个队列,在数据结构中,队列是一种线性表。 我们通过一个共 ...
分类:
编程语言 时间:
2018-05-09 15:00:03
阅读次数:
153
用的是两个lock,putlock和takelock 这样一来其实就相当于两个线程 但是两个线程操作指针也会有并发问题 如果队列元素个数大于1,是不会有问题的,因为put是在队列尾,take是在队列头部 如果队列元素个数为0或者1,会有可能 在设计上是,先放,再cas加一,取的线程在for循环获取, ...
分类:
其他好文 时间:
2018-05-08 14:24:37
阅读次数:
236
在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个: (1)ArrayBlockingQueue 基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。 (2)LinkedBlockingQueue 基于链表实现的一个阻塞队列, ...
分类:
其他好文 时间:
2018-05-05 14:19:11
阅读次数:
191
FutureTask FutureTask是J.U.C中的类,是一个可删除的异步计算类。这个类提供了Future接口的的基本实现,使用相关方法启动和取消计算,查询计算是否完成,并检索计算结果。只有在计算完成时才能使用get方法检索结果;如果计算尚未完成,get方法将会阻塞。一旦计算完成,计算就不能重 ...
分类:
其他好文 时间:
2018-05-03 15:26:16
阅读次数:
176
设计策略及其变化 第五次作业 多线程电梯 在这次作业一开始的大部分时间,我一直想着怎样设计最为完美,完全使用BlockingQueue,导致交作业前发现设计并不能满足指导书的要求。最后仓皇之中加了一个新的类,既臃肿,又是轮询实现,导致出现了bug。 第六次作业 IFTTT 这次作业采用了不同照 的方 ...
分类:
其他好文 时间:
2018-05-02 20:53:02
阅读次数:
163
三、采用BlockingQueue实现 BlockingQueue也是java.util.concurrent下的主要用来控制线程同步的工具。 BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类1、ArrayBlockingQueue:一个由数组支持的有界阻塞队列,规定大小 ...
分类:
编程语言 时间:
2018-04-27 15:52:02
阅读次数:
168