
多线程
文章平均质量分 83
iteye_2259
这个作者很懒,什么都没留下…
展开
-
线程模型--生产者&消费者模型
生产者/消费者模型 有了信号量这个利器,我们就可以处理比较复杂的线程同步模型了。 首先,我们来看一个比较简单的生产者/消费者模型。还是以Java代码为例。 public static final Object signal = new Object(); public static final char[] buf = new char[1024]; // 需要同步访问的共...原创 2010-07-28 21:53:56 · 99 阅读 · 0 评论 -
多线程笔记--4
25, 使用普通同步容器 (Vector, Hashtable) 的迭代器 , 需要外部锁来保证其原子性 .原因是 , 普通同步容器产生的迭代器是非线程安全的 .26, 在并发编程中 , 需要容器支持的时候 , 优先考虑使用 jdk 并发容器 (ConcurrentHashMap, ConcurrentLinkedQueue, CopyOnWriteArrayList…)....原创 2010-07-30 17:21:39 · 94 阅读 · 0 评论 -
多线程笔记--3
18, 保证共享变量的发布是安全的 a, 通过静态初始化器初始化对象 (jls 12.4.2 叙述 , jvm 会保证静态初始化变量是同步的 )b, 将对象申明为 volatile 或使用 AtomicReferencec, 保证对象是不可变的d, 将引用或可变操作都由锁来保护19, 设计线程安全的类 , 应该包括的基本要素 :a, 确定哪些是可变共享变量b, 确定...原创 2010-07-30 17:20:42 · 98 阅读 · 0 评论 -
多线程笔记--1
java并发编程实践笔记1, 保证线程安全的三种方法 :a, 不要跨线程访问共享变量b, 使共享变量是 final类型的c, 将共享变量的操作加上同步2, 一开始就将类设计成线程安全的 , 比在后期重新修复它 ,更容易 .3, 编写多线程程序 , 首先保证它是正确的 , 其次再考虑性能 .4, 无状态或只读对象永远是线程安全的 .5, 不要将一个共享...原创 2010-07-30 17:17:54 · 102 阅读 · 0 评论 -
多线程基本概念
线程同步的真实意思和字面意思恰好相反。线程同步的真实意思,其实是“排队”:几个线程之间要排队,一个一个对共享资源进行操作,而不是同时进行操作。 因此,关于线程同步,需要牢牢记住的第一点是:线程同步就是线程排队。同步就是排队。线程同步的目的就是避免线程“同步”执行。这可真是个无聊的绕口令。 关于线程同步,需要牢牢记住的第二点是 “共享”这两个字。只有共享资源的读写访问才需要同步。如果不是...原创 2010-07-30 17:15:47 · 90 阅读 · 0 评论 -
JDK1.5并发包学习笔记(3)
总结 : 1. 写一个方法实现Callable接口 2. 生成executorService es = Executors.newFixedThreadPool(3); 3. 运行该线程 Future f = es.submit(c1); c1即为实现Callablel类的实例第二项:queue JDK5.0新增的con...原创 2010-07-28 21:59:15 · 107 阅读 · 0 评论 -
JDK1.5并发包学习笔记(2)
以下是调用DoCallStuff的主程序。 import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurre...原创 2010-07-28 21:58:53 · 113 阅读 · 0 评论 -
JDK1.5并发包学习笔记(1)
Jdk1.5中的多线程。主要是在java.util.concurrent包中 ,其中几个重要的类对比如下 5.0 1.4ExecutorService 取代 ThreadCallable Future 取代 RunnableLock ...原创 2010-07-28 21:58:13 · 200 阅读 · 0 评论 -
线程模型--读写模型(3)
这种用法要求在执行一些处理之前,一定要执行某项特殊操作,处理之后一定也要执行某项特殊操作。这种人为的顺序性,无疑增加了代码的耦合度,降低了代码的独立性。很有可能会成为线程死锁和资源操作冲突的根源。 这点一直让我不安,可是没有找到方法避免。毕竟,死锁或者资源操作冲突,是线程的固有问题。 很巧的是,正在我惴惴不安的时候,我的一个朋友提供了一个信息。Sun公司根据JCR,决定在jdk1.5中引入...原创 2010-07-28 21:56:32 · 117 阅读 · 0 评论 -
线程模型--读写模型(2)
上述代码只是一段示意代码。实际应用中,人们通常抽取出来一个专门的读写同步锁。 interface ReadWriteLock { … getReadLock(); … releaseReadLock(); … getWriteLock(); … releaseWriteLock(); } 具体的实现原理也是类似的信号量同步机制。 class RW...原创 2010-07-28 21:56:14 · 98 阅读 · 0 评论 -
线程模型--读写模型(1)
读写模型 读写模型是一个稍微复杂一些的模型。 一份共享资源允许多个读者同时读取。但是只要有一个写者在写这份共享资源,任何其他的读者和写者都不能访问这份共享资源。 读写模型实现起来,不仅需要信号量机制,还需要额外的读者计数和写者计数。 public static final Object signal = new Object(); public static int rea...原创 2010-07-28 21:55:43 · 134 阅读 · 0 评论 -
ReentrantLock锁机制原理
因为ReentrantLock和ReentrantReadWriteLock的实现原理基本相同,就单看ReentrantLock。 第一步先看加锁 final void lock() { if (compareAndSetState(0, 1)) // 第一次尝试CAS指令来获取锁,若是失败的话,再通过...原创 2013-01-09 23:31:41 · 207 阅读 · 0 评论