Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中告诉异步作业等待_Java_Multithreading_Asynchronous_Runnable - Fatal编程技术网

在Java中告诉异步作业等待

在Java中告诉异步作业等待,java,multithreading,asynchronous,runnable,Java,Multithreading,Asynchronous,Runnable,我的异步作业有时(并非总是)无法按所需时间处理结果,我必须向客户机返回某种消息,说明他的请求仍在准备中,方法是在数据库中进行检查 请求和为其创建必要对象在一个数据库事务中处理,异步过程在不同的事务中处理。我通过将可运行实例传递给execute方法来使用ScheduledThreadPoolExecutor 有时客户端发出请求,而his浏览器在加载异步作业时,我的异步作业能够为其准备必要的数据,但有时却不能 所以我的问题是:我是否可以告诉异步作业等待数据准备就绪?我担心,仅使用一个可运行的实例,您

我的异步作业有时(并非总是)无法按所需时间处理结果,我必须向客户机返回某种消息,说明他的请求仍在准备中,方法是在数据库中进行检查

请求和为其创建必要对象在一个数据库事务中处理,异步过程在不同的事务中处理。我通过将可运行实例传递给execute方法来使用ScheduledThreadPoolExecutor

有时客户端发出请求,而his浏览器在加载异步作业时,我的异步作业能够为其准备必要的数据,但有时却不能


所以我的问题是:我是否可以告诉异步作业等待数据准备就绪?

我担心,仅使用一个可运行的实例,您无法告诉进程等待,除非您让线程休眠一段时间或循环并不断询问结果,这两个都是坏主意

为了正确地实现这一点,您应该通过将实例传递给它的构造函数来使用。通过重写call()方法,您应该告诉事务处理程序执行此任务

您还需要某种任务管理器,它将任务添加到队列中,并创建一个线程池来接受和处理这些任务。出于队列目的,我建议使用,例如:它接受FutureTask的一般类型

此外,您还应该有一张未来任务的地图,该地图由未来任务的名称或以未来任务为值的内容进行映射。在等待线程被处理时的结果方面,您必须立即将其从未来映射中删除。然后,当客户端请求时,您应该检查:如果futures映射包含任务,则从中获取FutureTask并调用FutureTask.get()。这将等待任务完成


这正是我要采用的方法。希望这能有所帮助。

我担心,仅使用一个可运行的实例,您无法告诉进程等待,除非您将线程休眠一段时间或循环,并不断询问结果,这两个都是坏主意

为了正确地实现这一点,您应该通过将实例传递给它的构造函数来使用。通过重写call()方法,您应该告诉事务处理程序执行此任务

您还需要某种任务管理器,它将任务添加到队列中,并创建一个线程池来接受和处理这些任务。出于队列目的,我建议使用,例如:它接受FutureTask的一般类型

此外,您还应该有一张未来任务的地图,该地图由未来任务的名称或以未来任务为值的内容进行映射。在等待线程被处理时的结果方面,您必须立即将其从未来映射中删除。然后,当客户端请求时,您应该检查:如果futures映射包含任务,则从中获取FutureTask并调用FutureTask.get()。这将等待任务完成

这正是我要采用的方法。希望这有帮助