赞
踩
单线程执行模式:指“以⼀个线程执⾏”。该模式⽤于设置限制,以确保同⼀时间只能让⼀个线程执⾏处理。
不可变模式:存在确保实例状态不发⽣改变的类。在访问这些实例时不需要执⾏耗时的互斥处理。
String就是采用的这种模式。
保护暂停/等待模式:存在一个守护条件,如果守护条件不成⽴(执⾏现在的处理会造成问题),就让执⾏处理的线程进⾏等待。
LinkedBlockingQueue阻塞队列就是这种模式,当take()方法未获取到数据时线程会阻塞。
立即中断模式:与Guarded Suspension模式⼀样,也存在守护条件。如果守护条件不成⽴,则⽴即中断处理。
何时使用:1.不需要执⾏时,2.不需要等待守护条件成⽴时,3.守护条件仅在第⼀次成⽴时,例如初始化某个类
还有中介于Guarded Suspension和Balking之间的方法,即不立即中断也不一直等待,而是等待一段时间再中断。使用此模式的有:
(以下是通过异常通知超时)
java.util.concurrent.Future的get⽅法;
java.util.concurrent.Exchanger的exchange⽅法;
java.util.concurrent.Cyclicarrier的await⽅法
java.util.concurrent.CountDownLatch的await⽅法。
(以下是通过返回值通知超时)
java.util.concurrent.BlockingQueue接⼝,当offer⽅法的返回值为false,或poll⽅法的返回值为null,表示发⽣了超时。
java.util.concurrent.Semaphore类,当tryAcquire⽅法的返回值为false时,表示发⽣了超时。
java.util.concurrent.locks.Lock接⼝,当tryLock⽅法的返回值为false时,表示发⽣了超时。
生产者-消费者模式:
⽣产者安全地将数据交给消费者。
当⽣产者和消费者以不同的线程运⾏时,两者之间的处理速度差异会有问题。
⽣产者消费者模式⽤于消除线程间处理速度的差异带来的问题。
在该模式中,⽣产者和消费者都有多个,当⽣产者和消费者只有⼀个时,我们称为管道(Pipe)模式。
JUC中BlockingQueue的实现就是用的生产者-消费者模式。
读写锁模式:
读取操作和写⼊操作分开考虑,读读不互斥,写写互斥,读写互斥。
适合读取操作负载较⼤的情况。
JUC包中的ReadWriteLock接⼝和ReentrantReadWriteLock类就是该种设计模式。
每个消息⼀个线程模式:
在Thread-Per-Message模式中,消息的委托⽅和执⾏⽅是不同的线程。每次消息过来,委托方会将消息委托给一个新的线程(执行方)来执行,这样可以立即响应客户端,让执行方慢慢执行任务。
JUC包的Thread-Per-Message模式应用:
java.lang.Thread类
java.lang.Runnable接⼝
java.util.concurrent.ThreadFactory接⼝
java.util.concurrent.Executors
java.util.concurrent.Executor接⼝
java.util.concurrent.ExecutorService接⼝
java.util.concurrent.ScheduledExecutorService类
工作线程模式:会逐个取回⼯作并进⾏处理。当所有⼯作全部完成后,工作线程会等待新的⼯作到来。
Worker Thread模式也被称为Background Thread模式。有时也称为Thread Pool模式。
Worker Thread模式的优点:
1.提⾼吞吐量
2.容量控制
3.调⽤与执⾏的分离(提⾼响应速度,可以分布式部署)
JUC包的Worker Thread模式:
java.util.concurrent.ThreadPoolExecutor类
java.util.concurrent.Executors 类
未来模式:假设由⼀个⽅法需要⻓时间执⾏才能获取结果,则⼀般不会让调⽤的程序等待,⽽是先返回给它⼀张“提货卡”。获取提货卡并不消耗很多时间。该“提货卡”就是Future⻆⾊。
JUC包中的应用:
java.util.concurrent.Callable
java.util.concurrent.Future
java.util.concurrent.FutureTask
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。