
Java并发编程实践笔记
zz的的
这个作者很懒,什么都没留下…
展开
-
Semaphore
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。 Semaphore经常用于限制获取某种资源的线程数量。下面举个例子,比如说操场上有5个...原创 2018-07-24 16:13:51 · 348 阅读 · 0 评论 -
死锁之加锁顺序
package thread.test;import java.math.BigDecimal;import java.util.Currency;public abstract class Amount implements Comparable<Amount>{ public abstract BigDecimal getBalance(); public abs...原创 2018-07-23 16:31:51 · 1472 阅读 · 0 评论 -
线程的中断interrupt,判断是否中断isInterrupt和interrupted的区别
api 含义 public void interrupt() 中断线程,中断并不是真正的中断线程,而只设置标志位(中断位)来通知用户 public boolean isInterrupt() 判断Thread 对象是否中断 public static boolean interrupted 判断 当前线程是否中断,并且清除当前中断状态 pa...原创 2018-07-21 10:54:47 · 826 阅读 · 0 评论 -
用多个线程计算和
package thread.test;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorCompleti...原创 2018-07-20 14:22:13 · 606 阅读 · 0 评论 -
为计算结果建立高效可伸缩的高速缓存
package thread.test;public interface Computable<A,V> { V compute(A arg) throws InterruptedException;}package thread.test;import java.math.BigInteger;public class ExpensiveFunction i...原创 2018-07-19 20:43:06 · 153 阅读 · 0 评论 -
FutureTask
package thread.test;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import...原创 2018-07-19 15:51:52 · 139 阅读 · 0 评论 -
读写锁
ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。 基本规则: 读读不互斥 读写互斥 写写互斥 问题: 既然读读不互斥,为何还要加读锁 答: 如果只是读,是不需要加锁的,加锁本身就有性能上的损耗 如果读可以不是最新...原创 2018-07-24 18:03:48 · 4174 阅读 · 2 评论 -
条件队列
wait()、notify()和notifyAll()一般是跟synchronized配合一起使用,这些方法都是Object类提供的。当线程重wait()状态下被唤醒,wait()在被唤醒后还需要重新去获取锁,此时它重新请求锁时并没有具备任何特殊的优先级,要与任何其他尝试进入同步代码块的线程一起去竞争获取锁,如果获取锁失败的话,会继续停留在当前的wait()方法状态下。所以wait方法继续...原创 2018-07-25 17:09:41 · 414 阅读 · 0 评论