Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// System.out.println("interrupted");
}
System.out.println("ran");
}
};
Thread t = new Thread(r);
t.start();
System.out.println("started");
try {
t.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("interrupting");
t.interrupt();
System.out.println("ended");
这里的 try {
t.sleep(2000);
} 与 // Thread.sleep(2000); 一个意思
是main线程睡了?不是t线程睡了?不是调用t线程的睡眠方法吗?怎么也是mian线程睡了?sleep()的定义不是指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权.在这题就是指当前的mian线程而不是调用其的线程t?
答案为:恩,是main线程睡了,sleep()是静态方法,API上说:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权。
API写清楚了其实 另外无论哪个线程睡眠,另外的线程会继续获得cpu的资源运行