In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-28 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/02 Report--
这篇文章将为大家详细讲解有关Java多线程中Future设计模式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Future -> 代表的是未来的一个凭据public interface Future { T get() throws InterruptedException;}AsynFuture -> Future具体实现类
public class AsynFuture implements Future { private volatile boolean done = false; private T result; public void done(T result){ synchronized (this){ this.result = result; this.done = true; this.notifyAll(); } } /** * 轮询 没有完成等待 */ @Override public T get() throws InterruptedException { synchronized (this) { while (!done) { this.wait(); } } return result; }}FutureService -> 桥接Future和FutureTask
public class FutureService { /** * 需进程等待 */ public Future submit(final FutureTask task) { AsynFuture asynFuture = new AsynFuture(); new Thread(() -> { T result = task.call(); asynFuture.done(result); }).start(); return asynFuture; } /** * 运行完 自动回调 * 无需进程等待 */ public Future submit(final FutureTask task, final Consumer consumer) { AsynFuture asynFuture = new AsynFuture(); new Thread(() -> { T result = task.call(); asynFuture.done(result); consumer.accept(result); }).start(); return asynFuture; }}FutureTask -> 将你的调用逻辑进行了隔离
public interface FutureTask { T call();}
需要时回调:
/** * Future -> 代表的是未来的一个凭据 * FutureTask -> 将你的调用逻辑进行了隔离 * FutureService -> 桥接Future和FutureTask */public class SyncInvoker { public static void main(String[] args) throws InterruptedException { FutureService futureService = new FutureService(); Future future = futureService.submit(() -> { try { Thread.sleep(10001); } catch (InterruptedException e) { e.printStackTrace(); } return "FINISH"; }); System.out.println("=============="); System.out.println("do other thing."); Thread.sleep(1000); System.out.println("=============="); /** * 调用也形成了阻塞 */ System.out.println(future.get()); }}
运行:
==============
do other thing.
==============
FINISH
运行完自动回调:
//** * Future -> 代表的是未来的一个凭据 * FutureTask -> 将你的调用逻辑进行了隔离 * FutureService -> 桥接Future和FutureTask */public class SyncInvoker { public static void main(String[] args) throws InterruptedException { FutureService futureService = new FutureService(); futureService.submit(() -> { try { Thread.sleep(10001); } catch (InterruptedException e) { e.printStackTrace(); } return "FINISH"; },System.out::println); System.out.println("=============="); System.out.println("do other thing."); Thread.sleep(1000); System.out.println("=============="); }}关于"Java多线程中Future设计模式怎么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.