thread
是夜色太荒芜
编程中最没用的东西是源代码,最有用的东西是算法和数据结构
展开
-
Java多线程编程:变量共享分析(Thread)
(原文地址) 在编写多线程程序时,最重要的就是搞清楚哪些变量是共享的,哪些变量是不共享的。也就是要分析清楚其中的原理呀。因为最近要使用多线程就看了一些,对使用Thread类的子类创建线程的情况,总结如下: 1.方法体内部定义的局部变量不共享 这是因为方法内部定义的变量是在运行时动态生成的。每个线程都有一个自己的堆栈,用于保存运行时的数据。 最容易理解的就是递归调用时候,每次的转载 2015-06-08 15:32:01 · 509 阅读 · 0 评论 -
Callable和Future,CompletionService和ExecutorCompletionService的好处和使用场景
本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子:p转载 2015-07-07 11:05:38 · 529 阅读 · 0 评论 -
JDK并发工具包CompletionService和ExecutorCompletionService的好处和使用场景
《Java并发编程实践》一书6.3.5节CompletionService:Executor和BlockingQueue,有这样一段话: “如果向Executor提交了一组计算任务,并且希望在计算完成后获得结果,那么可以保留与每个任务关联的Future,然后反复使用get方法,同时将参数timeout指定为0,从而通过轮询来判断任务是否完成。这种方法虽然可行,但却有些繁琐。幸运的是,还有一种更好的方转载 2015-07-07 11:12:13 · 755 阅读 · 0 评论 -
CopyOnWriteArrayList详解
CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。 这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更 有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的迭代器方法在创建迭代器时使用了对数组状态的转载 2015-07-07 13:47:23 · 463 阅读 · 0 评论 -
浅谈volatile变量的理解
原文 本文为菠萝大象原创,如要转载请注明出处。http://www.blogjava.net/bolo在Java并发编程里面,volatile是个很重要的概念,大象也来讲讲自己对它的理解。 以前曾经有段时间我一直没搞明白volatile到底怎么用,它是怎样实现的同步,而且对于volatile变量还有一些限制条件。任何技术在没完全弄明白之前,至少在没熟练掌握之前都不太敢放心大转载 2015-10-08 15:51:08 · 541 阅读 · 0 评论 -
Timer的缺陷 用ScheduledExecutorService替代
原文地址 继续并发,上篇博客对于ScheduledThreadPoolExecutor没有进行介绍,说过会和Timer一直单独写一篇Blog. 1、Timer管理延时任务的缺陷 a、以前在项目中也经常使用定时器,比如每隔一段时间清理项目中的一些垃圾文件,每个一段时间进行数据清洗;然而Timer是存在一些缺陷的,因为Timer在执行定时任务时只会创建一个线程,所以如果存在多个任务,且任务时间过长转载 2016-01-04 13:42:35 · 302 阅读 · 0 评论 -
ScheduledExecutorService定时周期执行指定的任务
原文地址 一:简单说明 ScheduleExecutorService接口中有四个重要的方法,其中scheduleAtFixedRate和scheduleWithFixedDelay在实现定时程序时比较方便。 下面是该接口的原型定义 java.util.concurrent.ScheduleExecutorService extends ExecutorService extends Exe转载 2016-01-04 15:21:10 · 376 阅读 · 0 评论