哪些 Thread.sleep 命令暂停了哪些线程?
Which Thread.sleep commands pauses which threads?
下面有四个 Thread.sleep(...) 的声明。每个声明都标有 第 #1 到 #6 行。我的问题是哪些声明让哪些线程暂停?
class Runa extends Thread{
public void run(){
try{
// Line #1
Thread.sleep(500);
//Line #2
this.sleep(500);
}catch(Exception e) {}
}
}
class Runb implements Runnable {
Thread t;
Runb() {
t = new Thread(this);
t.start();
try{
//Line #3
Thread.sleep(500);
}catch(Exception e){ }
}
@Override
public void run() {
try {
do {
// Line #4
Thread.sleep(2000);
// Line #5
// t.sleep(500);
count++;
} while (count < 10);
} catch (InterruptedException e) {
}
}
}
public class thread2Runnable2 {
public static void main(String args[]) {
Runa rua = new Runa();
rua.start();
//Line #6
rua.sleep(500);
Runb runb = new Runb();
}
}
这些是我的假设:
Line #1 pause Runa thread
Line #2 pause Runa thread
Line #3 pause the main thread
Line #4 pause t thread
Line #5 pause t thread
Line #6 pause the main thread
我的假设是否正确?
Thread#sleep(long)
方法是一个 static 方法,其中:
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.
当前正在执行的线程是调用该方法的线程。因此,无论哪个线程调用 sleep
都是睡眠的线程。据我所知,您的假设似乎是正确的。
Thread.sleep() 是一个静态方法,所以无论你在哪个对象上调用它都没有关系:它总是作用于当前正在执行的线程。
您可以在实例(例如 runa
)语法上调用此方法这一事实完全是 Java 的一个怪癖,可能会非常混乱。许多 IDE 和其他代码质量工具会将此类调用突出显示为警告,因为对象引用与调用完全无关,因此可能会误导阅读代码的人。
如果您使用普通的静态调用语法,Thread.sleep(NNNN)
,您会看到没有传递任何对象引用,即使不阅读文档,也很容易得出这样的结论:唯一合理的行为是采取行动在当前线程上。
下面有四个 Thread.sleep(...) 的声明。每个声明都标有 第 #1 到 #6 行。我的问题是哪些声明让哪些线程暂停?
class Runa extends Thread{
public void run(){
try{
// Line #1
Thread.sleep(500);
//Line #2
this.sleep(500);
}catch(Exception e) {}
}
}
class Runb implements Runnable {
Thread t;
Runb() {
t = new Thread(this);
t.start();
try{
//Line #3
Thread.sleep(500);
}catch(Exception e){ }
}
@Override
public void run() {
try {
do {
// Line #4
Thread.sleep(2000);
// Line #5
// t.sleep(500);
count++;
} while (count < 10);
} catch (InterruptedException e) {
}
}
}
public class thread2Runnable2 {
public static void main(String args[]) {
Runa rua = new Runa();
rua.start();
//Line #6
rua.sleep(500);
Runb runb = new Runb();
}
}
这些是我的假设:
Line #1 pause Runa thread
Line #2 pause Runa thread
Line #3 pause the main thread
Line #4 pause t thread
Line #5 pause t thread
Line #6 pause the main thread
我的假设是否正确?
Thread#sleep(long)
方法是一个 static 方法,其中:
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.
当前正在执行的线程是调用该方法的线程。因此,无论哪个线程调用 sleep
都是睡眠的线程。据我所知,您的假设似乎是正确的。
Thread.sleep() 是一个静态方法,所以无论你在哪个对象上调用它都没有关系:它总是作用于当前正在执行的线程。
您可以在实例(例如 runa
)语法上调用此方法这一事实完全是 Java 的一个怪癖,可能会非常混乱。许多 IDE 和其他代码质量工具会将此类调用突出显示为警告,因为对象引用与调用完全无关,因此可能会误导阅读代码的人。
如果您使用普通的静态调用语法,Thread.sleep(NNNN)
,您会看到没有传递任何对象引用,即使不阅读文档,也很容易得出这样的结论:唯一合理的行为是采取行动在当前线程上。