我有一个用AtomicBoolean(设置为true)初始化的线程类。
public class WThread implements Runnable {
private Socket _listenerSocket;
private BufferedReader _br;
private final AtomicBoolean _isRunning;
private final AtomicBoolean _isRunning;
public WThread(Socket listenerSocket, AtomicBoolean isRunning) {
_listenerSocket = listenerSocket;
_isRunning = isRunning;
}
}
public void run() {
try {
System.out.println("Starting a worker thread.");
_br = new BufferedReader(new InputStreamReader(_listenerSocket.getInputStream()));
_command = _br.readLine();
dispatchCommand(_command);
} catch (IOException e) {
}
finally {
try {
_listenerSocket.close();
} catch (IOException e) {
}
}
}
private void dispatchCommand(String _command) {
switch(_command) {
case "fail":
fail();
break;
default:
break;
}
}
private void fail() {
System.out.println("Failed node.");
_isRunning.set(false);
try {
_listenerSocket.close();
} catch (IOException e) {
}
}
稍后,在同一个类中,我将该布尔值设置为false ...
_isRunning.set(false);
由于某种原因,似乎引用不起作用,并且原始的AtomicBoolean永远不会被设置,因为在父线程中不会发生某些预期的操作。
这是父类,无法打印“失败”:
public class ParentThread implements Runnable {
private ExecutorService _executor = null;
private final AtomicBoolean _isRunning = null;
public ParentThread(ExecutorService executor, AtomicBoolean isRunning)(
_executor = executor;
_isRunning = isRunning;
}
public void run() {
try {
while(_isRunning.get()) {
_executor.submit(new WThread(_isRunning));
}
if (!_isRunning.get()) {
System.out.println("Fail.");
_executor.shutdownNow();
}
} catch (IOException e) {
}
}
}