2011-11-14 170 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

相關問題