import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * @Auther: admin * @Date: 2019-07-09 09:13 * @Description: */ public class test { public static void main(String[] args) { ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build(); //两个线程的线程池 ExecutorService executor= new ThreadPoolExecutor(2,2,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory); //小红买酒任务,这里的future2代表的是小红未来发生的操作,返回小红买东西这个操作的结果 CompletableFuture<String> future2 = CompletableFuture.supplyAsync(()-> { System.out.println("爸:小红你去买瓶酒!"); try { System.out.println("小红出去买酒了,女孩子跑的比较慢,估计5s后才会回来..."); Thread.sleep(5000); return "我买回来了!"; } catch (InterruptedException e) { System.err.println("小红路上遭遇了不测"); return "来世再见!"; } },executor); //小明买烟任务,这里的future1代表的是小明未来买东西会发生的事,返回值是小明买东西的结果 CompletableFuture<String> future1 = CompletableFuture.supplyAsync(()->{ System.out.println("爸:小明你去买包烟!"); try { System.out.println("小明出去买烟了,可能要3s后回来..."); Thread.sleep(3000); return "我买回来了!"; } catch (InterruptedException e) { System.out.println("小明路上遭遇了不测!"); return "这是我托人带来的口信,我已经不在了。"; } },executor); //获取小红买酒结果,从小红的操作中获取结果,把结果打印 future2.thenAccept((e)->{System.out.println("小红说:"+e);}); //获取小明买烟的结果 future1.thenAccept((e)->{System.out.println("小明说:"+e);}); System.out.println("爸:loading......"); System.out.println("爸:我觉得无聊甚至去了趟厕所。"); System.out.println("爸:loading......"); } }
记录网上找到的比较好的多线程异步操作的例子
最新推荐文章于 2022-01-21 17:20:23 发布