我在java中创建一个服务器,在另一个线程中有一个MySQL连接,因此它是事件驱动的,不会阻塞主线程。
到目前为止它运行良好,它适用于不返回的查询(插入等),但我不确定如何实现将在另一个线程中运行的回调方法。如果我只是从数据库连接线程调用一个方法,那么该方法就在该线程中运行。
最好的方法是什么?
答案 0 :(得分:3)
有java.util.concurrent.FutureTask
。
如果没有,也许您的数据库线程可以实现命令/查询池,并且每个命令/查询都能够使用反射调用给定对象的回调方法。这将允许非阻塞命令排队和命令/查询完成时的通知。
答案 1 :(得分:2)
你可以使用java.util.concurrent.Future并将其交给一个处理结果的对象
答案 2 :(得分:1)
一种机制是拥有ConcurrentLinkedQueue个实例的队列(FutureTask)。您的应用程序线程将向Queue添加实例,然后轮询任务的完整性。您的数据库连接线程将轮询队列以查找要服务的任务。
答案 3 :(得分:0)
回调通常在另一个线程中执行。如果你想在调用线程中调用某些东西,我会使用带有Future对象的ExecutorService。如果你不关心哪个线程工作,我会在执行数据库查询的线程中调用它或将任务添加到另一个线程池。
以下是使用ExecutorServices的一些示例
http://tutorials.jenkov.com/java-util-concurrent/executorservice.html