繁体   English   中英

从一个线程调用另一个线程的方法以在另一个线程中执行

[英]Calling a method from one thread to another to execute in the other thread

我正在用Java创建服务器,该服务器在另一个线程中具有MySQL连接,因此它是事件驱动的,并且不会阻塞主线程。

到目前为止,它运行良好,它对不返回(插入等)的查询非常有用,但是我不确定如何实现将在另一个线程中运行的回调方法。 如果我只是从数据库连接线程中调用一个方法,则该方法将在该线程中运行。

最好的方法是什么?

java.util.concurrent.FutureTask

如果不是这样,也许您的数据库线程可以实现一个命令/查询池,并且对于每个命令/查询都可以使用反射来调用给定对象的回调方法。 这将允许非阻塞命令排队,并在命令/查询完成时发出通知。

您可以使用java.util.concurrent.Future并将其交给要处理结果的对象

一种机制是拥有FutureTask实例的队列( ConcurrentLinkedQueue )。 您的应用程序线程会将实例添加到队列,然后轮询任务的完整性。 您的数据库连接线程将轮询队列以查找要服务的任务。

回调通常在另一个线程中执行。 如果要在调用线程中调用某些内容,可以将ExecutorService与Future对象一起使用。 如果您不在乎哪个线程可以工作,我会在执行数据库查询的线程中调用它,或者将任务添加到另一个线程池中。

以下是使用ExecutorServices的一些示例

http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM