ExecutorService.submit(task, result)之主/子线程间共享数据

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 
 * 主/子线程间共享数据.<br>
 * @author gongqiang <br>
 * @version 1.0.0 2021年6月9日<br>
 * @see 
 * @since JDK 1.5.0
 */
public class PrimarySubThreadShared {
	/**
	 * 示例.
	 * @param args
	 */
    public static void main(final String[] args) throws InterruptedException, ExecutionException {
        final String name = "武则天";
        final Date brith = new Date();
        // 创建Result对象
        final Result r = new Result();
        r.setName(name);
        r.setBrith(brith);
        
        final ExecutorService executor = Executors.newFixedThreadPool(1);
        // 提交任务
        final Future<Result> future = executor.submit(new Task(r), r);
        final Result fr = future.get();
        // 下面等式成立
        System.out.println("fr==r:" + (fr == r));
        System.out.println("fr.getName()==name:" + (fr.getName() == name));
        System.out.println(fr.getBrith().equals(PrimarySubThreadShared.getDate()));
    }

    public static Date getDate() {
        try {
            return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("1987-04-02 12:00:00");
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}

class Task implements Runnable {
    private final Result r;

    // 通过构造器传入result
    public Task(final Result r) {
        this.r = r;
    }

    public void run() {
        // 操作result.
        final String name = r.getName();
        r.setBrith(PrimarySubThreadShared.getDate());
    }
}

class Result {
	/**
	 * 姓名.
	 */
    private String name;
    /**
     * 生日.
     */
    private Date brith;
	/**
	 * 获取name.
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * 设置name.
	 * @param newName the name to set
	 */
	public void setName(String newName) {
		name = newName;
	}
	/**
	 * 获取brith.
	 * @return the brith
	 */
	public Date getBrith() {
		return brith;
	}
	/**
	 * 设置brith.
	 * @param newBrith the brith to set
	 */
	public void setBrith(Date newBrith) {
		brith = newBrith;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值