并行设计模式属于优化的一部分,它是对一些常用的多线程结构的总结和抽象。与串行相比,并行程序的结构通常更为复杂。因此合理的使用并行模式在多线程开发中更具有意义。
Future模式
Future模式有点类似商品订单。比如网购时,当看重某一件商品时,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们的Ajax请求的时候,页面是异步的进行后台处理,用户无须一直等待请求结果,可以继续浏览或操作其他内容。1
2
3
4
5
6
7
8
9
10
11
12
13public class Main {
public static void main(String[] args) {
FutureClient fc = new FutureClient();
Data data = fc.request("请求参数");
System.out.println("请求发送成功!");
System.out.println("FutureClient做其他的业务操作");
String result = data.getRequest();
System.out.println(result);
}
}
1 | public class FutureClient { |
1 | public interface Data { |
1 | public class FutureData implements Data{ |
1 | public class RealData implements Data{ |
Master-Worker模式
Master-Worker模式是常用的并行计算模式。它的核心思想是系统有两类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完毕后,会将结果返回给Master,有Master做归纳总结。其好处就是将一个大任务分解成若干和小任务,并行执行,从而提高系统的吞吐量。
1 | public class Main { |
1 | public class Master { |
1 | public class Task { |
1 | public class Worker implements Runnable{ |
生产者-消费者
生产者和消费者也是一个非常经典的多线程模式,我们在实际开发中应用非常广泛。在生产者-消费者模式中:通常由两类线程,即若干个生产者的线程和若干个消费者线程。生产者负责提交用户请求,消费者负责具体处理生产者提交的任务,在生产者和消费者之间通过共享内存缓存区进行通信。