
java线程
文章平均质量分 89
wsfengye
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(转)java并发编程-Executor框架
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为: 并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后在提交给一个Executor执行,...原创 2012-01-17 09:42:50 · 101 阅读 · 0 评论 -
ArrayList线程不安全分析
一个 ArrayList ,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。 在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1; 而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B...原创 2012-04-22 17:49:50 · 252 阅读 · 0 评论 -
ConcurrentModificationException
如果在获得了某个集合的迭代器之后,除了通过这个迭代器之外对该集合做了结构性的修改(添加元素或删除元素),那么再调用这个迭代器的next()或remove()方法就会抛ConcurrentModificationException异常。代码如:写道ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.as...原创 2012-04-22 16:38:37 · 119 阅读 · 0 评论 -
LinkedBlockingQueue和ConcurrentLinkedQueue
1.LinkedBlockingQueue<E>:java.util.concurrentpublic class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable一个基于已链接...原创 2012-04-21 14:19:32 · 123 阅读 · 0 评论 -
(转)深入研究ReentrantLock(重入锁)之引出话题篇
一直以来都想好好研究下ReentrantLock,她的独到魅力令我屡试不爽,无奈网上实在是没有太多的资料可以参考,于是自己开始深入研究它的内部实现机制,经过数天的研究,终于有点心得体会升华了,记录之……synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。1....原创 2012-04-20 20:28:18 · 115 阅读 · 0 评论 -
ReentrantLock和synchronized的区别随笔
可重入锁ReentrantLock的含义是: 当某个线程获取某个锁后,在未释放锁的情况下,第二次再访问该锁锁定的另一代码块时,可以重新进入该块。 什么情况下可以使用ReentrantLock:1,先看看synchronized的一些限制: 1.1:无法中断正在等候获取一个锁的线程 1.2:无法通过投票...原创 2012-04-20 20:27:13 · 127 阅读 · 0 评论 -
(转)ReentrantLock和synchronized两种锁定机制的对比
多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得...原创 2012-04-20 20:07:13 · 150 阅读 · 0 评论 -
SynchronousQueue
SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。 不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在; 除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素;也不能迭代队列,因为其中没有元素可用于迭代。队列的头是尝试添加到队列中的首个已...原创 2012-08-11 23:30:27 · 178 阅读 · 0 评论 -
(转)ThreadPoolExecutor
一、ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别前记: jdk官方文档(javadoc)是学习的最好,最权威的参考。文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolSize和maximumPoolSize,BlockingQu...原创 2012-08-11 22:41:13 · 225 阅读 · 0 评论 -
volatile变量
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。 这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本地内存(...原创 2012-02-20 21:26:12 · 106 阅读 · 0 评论 -
Java Atomic
我们知道volatile修饰的变量可以实现基本的加载和赋值的原子性,但是对于像i++等操作就不能保证原子性了,在JDK1.5之前我们只能通过synchronized(阻塞的方式)实现这些复合操作的原子性,在JDK1.5中java.util.concurrent.atomic 包提供了若干个类能实现对int,long,boolean,reference的几个特殊方法非阻塞原子性,这一系列类的...原创 2012-05-09 21:13:39 · 124 阅读 · 0 评论 -
ThreadLocal的几种误区
最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解 一、ThreadLocal是java线程的一个实现 ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护线程中的本地变量。针对每个线程,提供自己的变量,主要是为了避免线程冲突,每个线程维护自己的版...原创 2011-11-05 22:54:02 · 101 阅读 · 0 评论 -
正确理解ThreadLocal
首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()...原创 2011-11-05 22:41:48 · 96 阅读 · 0 评论 -
HashMap的非线程安全
在平时开发中,我们经常采用HashMap来作为本地缓存的一种实现方式,将一些如系统变量等数据量比较少的参数保存在HashMap中,并将其作 为单例类的一个属性。在系统运行中,使用到这些缓存数据,都可以直接从该单例中获取该属性集合。但是,最近发现,HashMap并不是线程安全的,如果你 的单例类没有做代码同步或对象锁的控制,就可能出现异常。 首先看下在多线程的访问下,非现场安全的HashMap的表...原创 2013-11-25 16:06:55 · 169 阅读 · 0 评论