10 2016 档案
Java Concurrency - ReadWriteLock & ReentrantReadWriteLock
摘要:锁所提供的最重要的改进之一就是 ReadWriteLock 接口和它的实现类 ReentrantReadWriteLock。这个类提供两把锁,一把用于读操作和一把用于写操作。同一时间可以有多个线程执行读操作,但只有一个线程可以执行写操作。当一个线程正在执行一个写操作,不可能有任何线程执行读操作。 正 阅读全文
posted @ 2016-10-28 20:58 huey2672 阅读(177) 评论(0) 推荐(0)
Java Concurrency - ReentrantLock
摘要:ReentrantLock 是可重入的互斥锁,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用 lock 方法的线程将成功 阅读全文
posted @ 2016-10-27 15:51 huey2672 阅读(229) 评论(0) 推荐(0)
Java Concurrency - Condition
摘要:Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待池(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Conditio 阅读全文
posted @ 2016-10-25 13:45 huey2672 阅读(219) 评论(0) 推荐(0)
Java Concurrency - Lock
摘要:Lock 是 Java API 提供的另一种线程同步机制,它提供了比 synchronized 关键字更为灵活、强大的锁定操作。 锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,一次只允许一个线程获得锁,对共享资源的所有访问都需要先获得锁。不过,某些锁可能允许对共享资源 阅读全文
posted @ 2016-10-24 17:36 huey2672 阅读(232) 评论(0) 推荐(0)
Java Concurrency - wait & notify, 等待通知机制
摘要:生产者消费者问题是一个常见的多线程同步案例:一组生产者线程和一组消费者线程共享一个初始状态为空、大小为 N 的缓冲区。只有当缓冲区没满的时候,生产者才能把消息放入缓冲区,否则必须等待;只有缓冲区不空的时候,消费者才能从缓冲区取消息,否则必须等待。由于缓冲区是临界资源,在同一时间,它只允许一个生产者放 阅读全文
posted @ 2016-10-19 10:43 huey2672 阅读(380) 评论(0) 推荐(0)
Java Concurrency - ThreadLocal, 本地线程变量
摘要:共享数据是多线程应用最常见的问题之一,但有时我们需要为每个线程保存一份独立的变量。Java API 提供了 ThreadLocal 来解决这个问题。 一个 ThreadLocal 作用的例子: 观察运行结果: Thread1, GET dateVar: Fri Oct 14 22:06:33 CST 阅读全文
posted @ 2016-10-17 10:29 huey2672 阅读(238) 评论(0) 推荐(0)
Java Concurrency - synchronized 关键字
摘要:当有多个线程竞争共享资源时,对资源的访问顺序敏感,则可能造成数据不一致。为了保证共享资源不被多个线程同时访问,则需要将竞争共享资源的代码置于临界区,临界区保证在同一时间内最多只能有一个线程执行该代码段。 先看一段由竞争共享资源造成数据不一致的代码: 运行结果: Huey 和 Jane 两个线程同时向 阅读全文
posted @ 2016-10-09 16:01 huey2672 阅读(220) 评论(0) 推荐(0)