Java7新特性(四)并发 6 TransferQueue对象
2013-12-09 14:18
239 查看
本文主要根据《Java程序员修炼之道》整理的代码笔记片段
TransferQueue对象 如果接收线程处于等待状态,transfer()马上把工作项传给它,否则就会阻塞直到取走工作项 [高效]
即正在处理的工作项的线程在交付当前工作之前(被取走之前),不开始其他工作项的处理。
如果采用LinkedBlockingQueue 必须设置大小,不然相连线程池塞入过快,会内存溢出
TransferQueue对象 如果接收线程处于等待状态,transfer()马上把工作项传给它,否则就会阻塞直到取走工作项 [高效]
即正在处理的工作项的线程在交付当前工作之前(被取走之前),不开始其他工作项的处理。
public abstract class MicroBlogThread extends Thread { protected final TransferQueue<Update> updates; protected String text = ""; protected final int pauseTime; private boolean shutdown = false; public MicroBlogThread(TransferQueue<Update> lbq_, int pause_) { updates = lbq_; pauseTime = pause_; } public synchronized void shutdown() { shutdown = true; } @Override public void run() { while (!shutdown) { doAction(); try { Thread.sleep(pauseTime); } catch (InterruptedException e) { shutdown = true; } } } public abstract void doAction(); }
public class MicroBlogThreadMain { public static void main(String[] a) { final Update.Builder ub = new Update.Builder(); final TransferQueue<Update> lbq = new LinkedTransferQueue<>(); //如果接收线程处于等待状态,transfer()马上把工作项传给它,否则就会阻塞直到取走工作项 [高效] MicroBlogThread t1 = new MicroBlogThread(lbq, 10) { public void doAction() { text = text + "X"; Update u = ub.author(new Author("Tallulah")).updateText(text).build(); boolean handed = false; try { handed = updates.offer(u, 100, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { } if (!handed) System.out .println("Unable to handoff Update to Queue due to timeout"); } }; MicroBlogThread t2 = new MicroBlogThread(lbq, 1000) { public void doAction() { @SuppressWarnings("unused") Update u = null; try { u = updates.take(); } catch (InterruptedException e) { return; } } }; t1.start(); t2.start(); } }
如果采用LinkedBlockingQueue 必须设置大小,不然相连线程池塞入过快,会内存溢出
相关文章推荐
- Java7新特性(四)并发 5 CopyOnWriteArrayList对象
- Java7新特性(四)并发 2 Lock对象处理死锁
- Java7新特性(四)并发 1 不可变对象及构造器
- Java7新特性(四)并发 3 CountDownLatch计数器对象
- Java7新特性(四)并发 4 Atomic、ConcurrentHashMap对象
- java7新特性——使用ThreadLocalRandom产生并发随机数
- Java 并发 --- 阻塞队列之LinkedTransferQueue源码分析
- Java7新特性(四)并发 7 ScheduledThreadPool
- java7新特性——使用ThreadLocalRandom产生并发随机数
- java7新特性——使用ThreadLocalRandom产生并发随机数
- Java7新特性(四)并发 8 forkjoin分支合并框架
- 【死磕Java并发】-----J.U.C之阻塞队列:LinkedTransferQueue
- java7新特性——使用ThreadLocalRandom产生并发随机数
- Java多线程--并发中集合的使用之LinkedTransferQueue
- 10.2 NSOperation/NSOperationQueue:提供了一些在GCD中不容易实现的特性,如:限制最大并发数量,操作之间的依赖关系.
- 高并发第十三弹:J.U.C 队列 SynchronousQueue.ArrayBlockingQueue.LinkedBlockingQueue.LinkedTransferQueue
- JDK容器与并发—Queue—LinkedTransferQueue
- 【Java并发编程】4、JDK7中TransferQueue的使用以及TransferQueue与SynchronousQueue的差别
- 第二章、对象及变量的并发访问 之 synchronized 同步方法(2)
- POSA2 第一章 并发网络对象(概述与1.1动机)