日期:2014-05-20 浏览次数:20732 次
package com.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
class R2 implements Runnable {
Runnable r;
public R2(Runnable r) {
this.r = r;
}
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (r) {
r.notifyAll();
}
System.out.println("R2 over");
}
}
public class R1 implements Runnable {
@Override
public void run() {
boolean b = false;
synchronized (this) {
while (!(b = Thread.interrupted())) {
try {
wait();
System.out.println("R1 awakend");
} catch (InterruptedException e) {
System.out.println("InterruptedException, interu:" + b);
}
}
System.out.println("R1 over, interrupted:" + b);
}
}
public static void main(String[] args) throws InterruptedException {
ExecutorService exec = Executors.newCachedThreadPool();
Runnable r1 = new R1();
Future<?> f = exec.submit(r1);
exec.execute(new R2(r1));
TimeUnit.SECONDS.sleep(2);
exec.shutdownNow();
/*boolean ret = f.cancel(true);
System.out.println("main cancel:" + ret );*/
}
}