import java.util.concurrent.atomic.AtomicBoolean;
public class TestThread {
private AtomicBoolean run = new AtomicBoolean(true);
public void shutdown() {
run.compareAndSet(true, false);
}
public int f(int n) {
if (n <= 2) {
return 1;
}
return f(n - 1) + f(n - 2);
}
public void start() {
for (int i = 0; i < 16; i++) {
new Thread(new Runnable() {
public void run() {
while (run.get()) {
System.out.println("run " + Thread.currentThread().getName() + " num:" + f(40));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
public static void main(String[] args) {
TestThread tt = new TestThread();
tt.start();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tt.shutdown();
System.out.println("shutdown");
}
}
/*
run Thread-4 num:102334155
run Thread-14 num:102334155
run Thread-3 num:102334155
run Thread-7 num:102334155
run Thread-15 num:102334155
run Thread-12 num:102334155
run Thread-2 num:102334155
run Thread-11 num:102334155
run Thread-6 num:102334155
run Thread-10 num:102334155
run Thread-5 num:102334155
run Thread-0 num:102334155
run Thread-1 num:102334155
run Thread-13 num:102334155
run Thread-8 num:102334155
run Thread-9 num:102334155
run Thread-4 num:102334155
run Thread-14 num:102334155
run Thread-3 num:102334155
run Thread-7 num:102334155
run Thread-12 num:102334155
run Thread-11 num:102334155
run Thread-2 num:102334155
run Thread-6 num:102334155
run Thread-5 num:102334155
run Thread-15 num:102334155
run Thread-10 num:102334155
run Thread-0 num:102334155
run Thread-8 num:102334155
run Thread-1 num:102334155
run Thread-13 num:102334155
run Thread-9 num:102334155
run Thread-4 num:102334155
run Thread-14 num:102334155
shutdown
run Thread-3 num:102334155
run Thread-7 num:102334155
Process finished with exit code 0
*/