2011-11-14 172 views
1

我正在一个服务器在Java中,在另一个线程中有一个MySQL连接,以便它是事件驱动的,不会阻塞主线程。调用从一个线程到另一个线程执行另一个线程的方法

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

这样做的最好方法是什么?

+0

使用的Runnable的队列中,让非连接螺纹挑选并从该队列中运行的一些例子吗? – Fakrudeen

+0

请记住,我对多线程相当陌生,你能解释“挑选和运行”是什么意思吗? –

回答

3

还有java.util.concurrent.FutureTask

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

1

的机制是有FutureTask实例的队列(ConcurrentLinkedQueue)。您的应用程序线程会将实例添加到队列中,然后轮询任务以确保完整性。您的数据库连接线程将轮询队列中要处理的任务。

0

回调通常在另一个线程中执行。如果你想在调用线程中调用某些东西,我会使用带有Future对象的ExecutorService。如果你不关心哪个线程完成工作,我会在执行DB查询的线程中调用它,或者将该任务添加到另一个线程池。

下面是使用ExecutorServices

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

相关问题