在我的Java應用程序中,我希望有一個線程池(爲此,我使用ExecutorService)連接到memcached服務器以發出一些請求。我希望每個線程都有自己的連接,打開一次並在整個運行時間內保持連接。我正打算使用下面的代碼,我在另一個問題發現:初始化ThreadLocal變量時傳遞參數
執行人服務
ExecutorService threadPool =
Executors.newFixedThreadPool(5, Executors.defaultThreadFactory());
的Runnable由線程池中
public class SocketTask implements Runnable {
private String workDetails;
private static final ThreadLocal<Socket> threadLocal =
new ThreadLocal<Socket>(){
@Override
protected Socket initialValue(){
return new Socket();
}
};
public SocketTask(String details){
this.workDetails = details;
}
public void run(){
Socket s = getSocket(); //gets from threadlocal
//send data on socket based on workDetails, etc.
}
public static Socket getSocket(){
return threadLocal.get();
}
}
執行我的問題是,當我初始化套接字如何做到這一點o我能夠通過一個參數(比如說一個帶有memcached服務器的IP的String)到新的Socket()調用中?
事情是「yourHost」將存儲在一個變量(也許類SocketTask的屬性),你怎麼做,所以它是可見的intialValue()方法內? – Moises
@Moises看到我的編輯。 – Mena
@Moises更多編輯。弄糊塗了我自己。現在應該更清楚了。 – Mena