jdk 多线程框架
来源:互联网 发布:python在ubuntu怎么用 编辑:程序博客网 时间:2024/06/08 13:14
最常用的 ExecutorService
Executors.newFixedThreadPool(n)
exec.execute(run);
线程池必须使用shutdown来显式关闭,否则主线程就无法退出。shutdown也不会阻塞主线程。
定时执行线程 ScheduledExecutorService
ScheduledFuture beeperHandle = scheduler.scheduleAtFixedRate( beeper, 1, 2, SECONDS);
要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。
这时候CyclicBarrier就可以派上用场。CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就表示这些线程都可以继续执行,否则就会等待。
并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列中,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象,如果没有对象,就等待直到有可取的对象。
CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。
CountDownLatch最重要的方法是countDown()和await(),前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了。
一个CountDouwnLatch实例是不能重复使用的,也就是说它是一次性的,锁一经被打开就不能再关闭使用了,如果想重复使用,请考虑使用CyclicBarrier。
考虑以下场景:浏览网页时,浏览器了5个线程下载网页中的图片文件,由于图片大小、网站访问速度等诸多因素的影响,完成图片下载的时间就会有很大的不同。如果先下载完成的图片就会被先显示到界面上,反之,后下载的图片就后显示。
Java的并发库的CompletionService可以满足这种场景要求。该接口有两个重要方法:submit()和take()。submit用于提交一个runnable或者callable,一般会提交给一个线程池处理;而take就是取出已经执行完毕runnable或者callable实例的Future对象,如果没有满足要求的,就等待了。 CompletionService还有一个对应的方法poll,该方法与take类似,只是不会等待,如果没有满足要求,就返回null对象。
操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java并发库的Semaphore可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。
Semaphore维护了当前访问的个数,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存“无限”的节点,用Semaphore可以实现有限大小的链表。
- jdk 多线程框架
- 多线程框架
- JDK多线程总结
- JDK日志框架
- 【JDK】:Java容器框架
- 【JDK】:Executor框架
- 【JDK】:Fork-Join框架
- jdk 1.6 集合框架
- JDK日志框架解读
- JDK 8 集合框架
- jdk多线程新特性1
- JDK中的多线程并发调用
- jdk 多线程与并发库
- Java框架:AOP--(JDK、CGLIB)
- 查看JDK以及框架源码
- JDK源码【集合框架】HashMap
- JDK源码【集合框架】list
- JDK多任务执行框架--------Executor框架
- eclipse 连接hadoop
- Java笔记(十二)——网络程序设计
- hadoop学习笔记<三>----HDFS
- hadoop学习笔记<四>----map-reduce工作原理
- office outlook 2010 如何修改IMAP电子邮件的数据文件位置
- jdk 多线程框架
- 长连接和短连接
- 鸽巢原理 Poj3370&Hdu1808 + Poj2356 + Hdu 1205
- Struts2标签如何实现For循环 像JSTL's <c:forEach begin="..." end="..." ...> 中的用法
- python urllib介绍
- 马士兵谈面试
- C语言编程实现西西弗斯串
- python urllib2模块介绍
- 学习日记-==和equals的区别