Java并发多线程编程——Future设计模式实现的示例
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发多线程编程——Future设计模式实现的示例相关的知识,希望对你有一定的参考价值。
一、Future的理解
- Future接口属于 java.util.concurrent包下;
- Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。
- FutureTask实现了RunnableFuture接口,RunnableFuture接口继承了Runnable接口和Future接口,所以Future接口的使用与FutureTask类似;
- 具体可参考此博文讲解的FutureTask类https://wwwxz.blog.csdn.net/article/details/117456141
二、Future设计模式实现的示例
1、创建产品类
package com.xz.thread.Future;
/**
* @description: 创建一个产品类
* @author: xz
* @create: 2021-06-06 15:01
*/
public class Product {
private int id;//产品id
private String name;//产品name
//setter、getter方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Product{" +
"id=" + id +
", name='" + name + '\\'' +
'}';
}
//构造方法,生产产品
public Product(int id, String name) {
System.out.println("生产产品【开始】:"+name);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.id = id;
this.name = name;
System.out.println("生产产品【结束】:"+name);
}
}
2、创建产品工厂类
package com.xz.thread.Future;
import java.util.Random;
/**
* @description: 产品工厂类
* @author: xz
* @create: 2021-06-06 15:11
*/
public class ProductFactory {
//生产产品方法,返回订单
public Future createProduct(String name){
System.out.println("下单成功!!!!!您可以去做其他事情了");
//创建订单
Future f =new Future();
new Thread(new Runnable() {
@Override
public void run() {
//创建产品
Product product = new Product(new Random().nextInt(), name);
//订单和产品进行关联
f.setProduct(product);
}
}).start();
return f;
}
}
3、创建订单类
package com.xz.thread.Future;
/**
* @description: 订单类
* @author: xz
* @create: 2021-06-06 15:35
*/
public class Future {
//提供getter、setter方法关联
private Product product;
private boolean finish = false;//定义一个boolean类型的变量,表示是否完成,默认false表示完成
public synchronized Product getProduct() {
while(!finish){//如果没有完成
try {
wait();//等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return product;
}
public synchronized void setProduct(Product product) {
if(finish){//如果完成,直接返回
return;
}
this.product = product;
this.finish =true;
notify();//唤醒所有线程
}
}
4、创建测试类
package com.xz.thread.Future;
/**
* @description: 测试类
* @author: xz
* @create: 2021-06-06 15:50
*/
public class Demo {
public static void main(String[] args) {
//工厂创建产品
ProductFactory productFactory =new ProductFactory();
//下单、交钱
System.out.println("下单并完成付款===========");
// 工厂开始创建产品,返回订单
Future f = productFactory.createProduct("蛋糕");
System.out.println("游戏已,打完游戏回来取蛋糕------------");
//返回产品
System.out.println("戏已打完,我去取蛋糕"+f.getProduct());
}
}
5、运行测试类类,输出结果如下:
以上是关于Java并发多线程编程——Future设计模式实现的示例的主要内容,如果未能解决你的问题,请参考以下文章
原创JAVA并发编程——Callable和Future源码初探
Java多线程与并发编程——ConditionCallable&Future
Java多线程与并发编程——ConditionCallable&Future