2010-12-07 78 views
2

語言是Java和問題:讓一些應用程序在端口上偵聽,並且此應用程序是多線程的,線程保存在ThreadLocals集合中。可以通過打開套接字來傳輸和傳輸文件,可以我打開套接字並將其傳遞給特定的線程?應用程序已經在套接字之間傳輸了特定的可串行化的X接口對象。套接字流寫作

回答

1

我同意彼得。但是如果你退後一步,驗證你的設計,並決定你真的需要這個,我認爲你可以做到以下幾點。

您應該向您的協議添加任何線程指示。假設你調用你的線程1,2,3等。因此,從客戶端發送的每個命令都應該包含它所專用的線程ID。監聽線程應該提取此值並將任務提交給特定線程。我不知道你是否可以使用現有的線程池,你需要你自己的線程池。但是不用擔心:如果你的線程池很簡單(即不會動態地改變線程數量等),那麼編寫自己的線程池只需要10個代碼行:創建線程列表List<Thread>,並寫入填充它的循環:threads.add(new Thread())

每個線程都應該在自己的隊列Runnable s上等待。當新任務到達線程#n時,只需創建runnable並將其放入相應的隊列。

+0

只是想添加年齡,因爲這個想法,我做了一個表,我跟蹤客戶端/服務器之間的線程通信。 – hephestos 2013-02-04 15:22:04

0

有一個工作線程的最簡單方法是(如果你願意或游泳池)使用的ExecutorService它是單線程的,然後你可以給它的任務與

ExecutorService executor = Executors.newSingleThreadExecutor(); 

executor.execute(new Runnable() { ... }); 

executor.shutdown(); 

不知道爲什麼你會保持線程在ThreadLocal變量中。也許是時候從設計中退一步,問問自己是否可以以更簡單的方式做到這一點。

+0

爲什麼大家都不喜歡Java的ThreadLocals? – hephestos 2010-12-08 07:58:25