1. // 创建FutureTask
  2. FutureTask<Integer> futureTask
  3. = new FutureTask<>(()-> 1+2);
  4. // 创建并启动线程
  5. Thread T1 = new Thread(futureTask);
  6. T1.start();
  7. // 获取计算结果
  8. Integer result = futureTask.get();
  1. // 创建FutureTask
  2. FutureTask<Integer> futureTask
  3. = new FutureTask<>(()-> 1+2);
  4. // 创建线程池
  5. ExecutorService es =
  6. Executors.newCachedThreadPool();
  7. // 提交FutureTask
  8. es.submit(futureTask);
  9. // 获取计算结果
  10. Integer result = futureTask.get();

直接把Future对象放到线程池里,然后用任务的get来获取执行结果,这特么真是骚的可以啊。

  1. // 向电商S1询价,并保存
  2. r1 = getPriceByS1();
  3. save(r1);
  4. // 向电商S2询价,并保存
  5. r2 = getPriceByS2();
  6. save(r2);
  7. // 向电商S3询价,并保存
  8. r3 = getPriceByS3();
  9. save(r3);

Future对象get的时候 通过LockSupport.lock 来阻塞。

课后思考

用三个线程去执行,每个线程的执行结果都get阻塞就可以了。
主要这个题目前后的询价没有顺序,有顺序的话如何优化性能,有点骚。