concurrency
文章平均质量分 92
iteye_12150
这个作者很懒,什么都没留下…
展开
-
Java创建线程的细节分析
前言 关于线程创建的问题,可以说是老生常谈了。在刚开始学习Thread的时候基本上都会接触到,用简单的一两句话就可以概括起来。一个是创建类实现Runnable接口,然后将该类的实例作为参数传入到Thread构造函数中。再调用Thread对象的start方法。还有一种是继承Thread类,覆写run方法。然后在该对象实例中调用start方法。那么,这两种方式在什么情况下适用呢?还有,既...原创 2013-06-01 14:36:01 · 108 阅读 · 0 评论 -
java concurrency: ThreadLocal及其实现机制
ThreadLocal概念 从字面上来理解ThreadLocal,感觉就是相当于线程本地的。我们都知道,每个线程在jvm的虚拟机里都分配有自己独立的空间,线程之间对于本地的空间是相互隔离的。那么ThreadLocal就应该是该线程空间里本地可以访问的数据了。ThreadLocal变量高效地为每个使用它的线程提供单独的线程局部变量值的副本。每个线程只能看到与自己相联系的值,而不知道...原创 2012-10-24 17:13:53 · 106 阅读 · 0 评论 -
java concurrency: synchronized vs lock
简介 在java的多线程编程中,需要考虑的最多的情况莫过于线程之间的同步和通信了。在线程的同步机制中,最常用的莫过于synchronized和lock。从更深层次的比较来说,他们有什么特点呢?在开发的时候到底哪种方式比较合适?我们就详细的了解一下吧。synchronized简介 一提起synchronized,似乎太简单了。在任何需要多线程访问的情况下,如果...原创 2012-10-22 15:59:53 · 97 阅读 · 0 评论 -
java concurrency: daemon线程
daemon线程的概念 在学习操作系统概念的时候,我们就曾听说过daemon的概念。daemon本身指的是在后台运行的进程或者线程,一般用来提供某些不需要与用户直接交互的服务,有点像我们见到的一些系统服务。在java线程中,一般可以分为两类,一类是普通的线程,就是那些我们通过常用的Thread类或者Runnable接口实现并启动的类。还有一类是daemon线程。这种线程也通过和创...原创 2012-10-21 14:00:51 · 92 阅读 · 0 评论 -
java concurrency: ConcurrentHashMap
引言 以前有几次碰到过一个有意思的多线程问题,当时的场景看起来比较简单。有两个线程,他们都需要写数据到统一的一个数据结构里,因为这两个线程是相互独立的,在他们执行的过程中我们将每个线程的一组名值对输出。当时觉得这不过是一个很简单的问题,我们可以用一个HashTable或者HashMap就可以了。我们可以保证两个线程访问数据的key是不同的,看起来应该不会存在多线程访问的冲突。实际运行...原创 2013-09-04 22:44:07 · 361 阅读 · 0 评论 -
java fork-join框架应用和分析
问题来源 记得很早以前自己学习算法的时候,听说过一种divide and conquer的策略,从某种角度来说,它和递归是有着很紧密的联系。比如说我们经常想到的一些排序的算法像快速排序、归并排序等,他们都是本质上将原有的问题集合拆分成两个子问题,然后再针对这些子问题进行进一步的处理,直到子问题已经得到解决。在这些子问题解决后上面的部分再将这些问题合并起来就得到了我们想要的答案。这个问...原创 2013-08-11 23:27:35 · 234 阅读 · 0 评论 -
Java threadpool机制深入分析
简介 在前面的一篇文章里我对java threadpool的几种基本应用方法做了个总结。Java的线程池针对不同应用的场景,主要有固定长度类型、可变长度类型以及定时执行等几种。针对这几种类型的创建,java中有一个专门的Executors类提供了一系列的方法封装了具体的实现。这些功能和用途不一样的线程池主要依赖于ThreadPoolExecutor,ScheduledThreadPo...原创 2013-07-22 16:15:29 · 407 阅读 · 0 评论 -
Cancel, Reject tasks in ThreadPool
简介 在前面的文章中我们讨论过提交task到线程池中间执行。那里主要是考虑任务提交后一切都正常执行的情况。但是,如果在某些情况下如果我们想要取消或者拒绝task的提交和执行。则需要用到一些其他的特性。Cancel Task Cancel task在线程池里有比较方便的支持。我们提交task的时候,一般会期待线程池的执行返回Future<T>类型的结果。在执行...2013-06-23 11:43:18 · 195 阅读 · 0 评论 -
java线程池分析和应用
比较 在前面的一些文章里,我们已经讨论了手工创建和管理线程。在实际应用中我们有的时候也会经常听到线程池这个概念。在这里,我们可以先针对手工创建管理线程和通过线程池来管理做一个比较。通常,我们如果手工创建线程,需要定义线程执行对象,它实现的接口。然后再创建一个线程对象,将我们定义好的对象执行部分装载到线程中。对于线程的创建、结束和结果的获取都需要我们来考虑。如果我们需要用到很多的线程时,...原创 2013-06-16 21:58:42 · 129 阅读 · 0 评论 -
CyclicBarrier的应用
简介 我们在多线程应用的一些设计中会碰到一些问题。比如说利用多个线程去分别计算某个问题的部分结果,然后再将结果存储在某个地方。等所有这些线程都结束之后,我们再将这些线程产生的结果合并起来并得到问题的解。这种方法基于这么一个前提,就是所有这些线程可以并行的执行,他们之间不会有互相的干扰。另外,线程产生的结果不会有冲突。比如说,我们可以给线程一个编号限制,某个线程产生的结果放到某个编号的...2013-06-16 01:03:11 · 120 阅读 · 0 评论 -
读写锁的应用
前言 在前面的一篇文章里,我曾经讨论了volatile修饰变量的使用。当时,经过各种分析和比较,发现在如果只有一个单线程写但是有多个线程读数据的情况下,volatile变量是一个适用的选项。在这部分,我们可以探讨另外一个选项。那就是ReentrantReadWriteLock。应用场景 记得以前在一些社区讨论的时候,就看到有人提出过这么一些让人觉得比较纠结的场景。比如说...原创 2013-06-12 19:39:45 · 1023 阅读 · 1 评论 -
producer-consumer问题的分析和讨论
问题描述 在学习多线程编程的时候,我们经常会碰到的一个问题就是producer consumer问题。这个概念在学习操作系统的时候也会常碰到。本身这个问题的描述比较简单。假设我们有两个进程或者线程。他们俩就好比是工厂里一条流水线上的两个车间。其中线程A生产的部件要交给下一个线程B来做进一步的处理。这个时候,线程A就相当于一个生产者,而线程B就相当于一个消费者。在生产者生产了一个部件...原创 2013-06-09 00:18:23 · 474 阅读 · 0 评论 -
java volatile关键字的理解
一个多线程的示例引发的问题在讨论这个关键字之前先看一个多线程的示例代码: public class RaceCondition { private static boolean done; public static void main(final String[] args) throws InterruptedException{ ...原创 2012-09-10 16:18:57 · 115 阅读 · 0 评论 -
Java thread中对异常的处理策略
前言 想讨论这个话题有一段时间了。记得几年前的时候去面试,有人就问过我一个类似的问题。就是java thread中对于异常的处理情况。由于java thread本身牵涉到并发、锁等相关的问题已经够复杂了。再加上异常处理这些东西,使得它更加特殊。 概括起来,不外乎是三个主要的问题。1. 在java启动的线程里可以抛出异常吗? 2. 在启动的线程里可以捕捉异常吗? 3. 如果可以捕捉异常...原创 2013-06-03 00:08:20 · 721 阅读 · 0 评论 -
Thread interrupt方法解析
初步理解 我们在看一些多线程代码的时候,有的时候会碰到使用interrupt()方法的时候。从字面的意思来理解,应该就是中断当前正在执行的线程。那么,对于一个我们设计的普通线程来说,如果我们在主线程里调用它的interrupt()方法,会不会导致它被中断呢? 比如说我们先写一段如下的代码:import java.util.concurrent.TimeUnit;p...2013-06-02 17:43:02 · 180 阅读 · 0 评论 -
java concurrency: synchronized collections
对数据同步访问封装的策略 我们经常操作一些本身不是线程安全的对象时,在多线程的环境下就会考虑到要采取一些措施来处理。一些典型比如说用synchronized来同步,有的如果情况允许的话使用ThreadLocal变量,还有的会将对象变成immutable的方式。当然,每种方法都需要根据具体问题来分析,不能在保证高并发性和线程安全的情况下完全通用。 同步的数据结构 ...原创 2012-10-25 15:43:57 · 120 阅读 · 0 评论