- 博客(5)
- 资源 (2)
- 收藏
- 关注
原创 Java线程之立刻处理刚完成的任务
ExecutorService的invokeAll()方法可以一次启动多个线程,并将这些线程的执行结果放入一个List。这是一个很方便的方法,但有不足之处,那就是必须等待所有线程全部结束之后,才会返回List,之后才能处理线程的结果。若有些线程执行很快,比如几秒就结束了,另一些线程执行很慢,要几小时,那么短时间线程的执行结果仍然无法立刻获取,必须等几小时之后,所有线程都结束了,他们的执行结果才可用
2013-04-28 13:58:55 3825
原创 Java线程之ExecutorService.invokeAny()
有一类多线程编程模式是这样的:启动多个线程,相互独立的(无同步)去计算一个结果,当某一个线程得到结果之后,立刻终止所有线程,因为只需要一个结果就够了。 实际应用场景:作为男生,电脑上必须有苍老师的爱情动作片。这种片子必须藏得非常隐蔽,隐蔽到什么程度呢?自己都忘了把它藏哪里了,这可咋办啊?编写多线程程序,针对每一个硬盘分区,启动一个线程,搜索该硬盘分区上的所有文件,找名字中含有“苍老师”的文件。由
2013-04-28 10:49:17 9410 8
原创 Java线程之Exchanger
Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。 当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行 public class ThreadLocalTest { public static void main(Stri
2013-04-26 15:22:50 18962 2
原创 Java线程之ThreadLocal
ThreadLocal的功能是实现一个线程独立的全局变量。 使用全局变量的好处是,程序的任何地方都可以使用它,而无需进行参数传递。 在单线程环境下,将类的属性和方法定义为static,即可实现全局变量。 但是在多线程环境下,普通的全局变量是线程间共享的,一个线程修改了全局变量的值,另一个线程可以看到这个修改。 使用ThreadLocal实现全局变量,即保留了随处可用这一优点,又能做到线程间
2013-04-26 14:43:52 5060
原创 Java线程之Phaser
Phaser是一个灵活的线程同步工具,他包含了CyclicBarrier和CountDownLatch的相关功能 首先,来看一下如何用Phaser替代CountDownLatch。对于CountDownLatch而言,有2个重要的方法,一个是await()方法,可以使线程进入等待状态,在Phaser中,与之对应的方法是awaitAdvance(int n)。CountDownL
2013-04-23 11:27:36 13060
High Performance MySQL 3rd Edition
2012-11-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人