[英]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.