2
我有一些代碼裏面給這裏如何將一個變量添加到一個ArrayList的ExecutorService的線程
public void doScan() {
Log.i(LOG_TAG, "Start scanning");
ExecutorService executor = Executors.newFixedThreadPool(NB_THREADS);
for(int dest=0; dest<255; dest++) {
String host = "192.168.5." + dest; //add net address instead of hardcoding
executor.execute(pingRunnable(host));
}
Log.i(LOG_TAG, "Waiting for executor to terminate...");
executor.shutdown();
try { executor.awaitTermination(10*1000, TimeUnit.MILLISECONDS); } catch (InterruptedException ignored) { }
Log.i(LOG_TAG, "Scan finished");
}
private Runnable pingRunnable(final String host) {
return new Runnable() {
public void run() {
Log.v(LOG_TAG, "Pinging " + host + "...");
try {
Socket s = null;
s = new Socket(InetAddress.getByName(host), ACES_PORT);
Log.v(LOG_TAG, "conn:"+s.toString());
if(s.isConnected()){
Log.v(LOG_TAG, "connected " + host);
foundDevicesArray.add(host);
}
} catch (UnknownHostException e) {
Log.e(LOG_TAG, "Not found", e);
} catch (IOException e) {
Log.e(LOG_TAG, "IO Error", e);
}
}
};
}
我試圖挽救了主人的連接線程內。我有一個全局的(我是新來的android,所以我不知道是否它是所謂的)ArrayList線程內我做ArrayList.add(主機),它崩潰在我我不是確定如何從崩潰中獲取常見的錯誤信息。
如何聲明和實例化foundDevicesArray? – assylias
static ArrayList foundDevicesArray; –
您需要初始化變量:'static List foundDevicesArray = new ArrayList ();'。但是,數組列表不是線程安全的,所以您應該使用CopyOnWriteArrayList(例如)來避免併發問題。您只需更改上面代碼的右側,而其餘代碼不需要修改。 –
assylias