Java 哪个Thread.sleep命令暂停哪个线程?
我有四个线程声明。睡眠。。。在下面每个声明都标有第1行到第6行。我的问题是,哪些声明使哪些线程暂停Java 哪个Thread.sleep命令暂停哪个线程?,java,multithreading,sleep,Java,Multithreading,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 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();
}
}
我的假设正确吗?该方法是一种静态方法,它:
根据系统计时器和调度程序的精度和准确性,使当前正在执行的线程休眠并暂时停止执行指定的毫秒数
当前执行的线程是调用该方法的线程。因此,无论哪个线程调用sleep,都是睡眠线程。据我所知,您的假设似乎是正确的。是一个静态方法,因此无论您调用哪个对象,它都将始终作用于当前正在执行的线程
事实上,您可以在一个实例上调用这个方法,例如,运行语法方面的调用,这是Java的一个怪癖,可能会让人非常困惑。许多IDE和其他代码质量工具会将此类调用作为警告进行强调,因为对象引用与调用完全无关,因此可能会误导阅读代码的人
如果使用正常的静态调用语法Thread.sleepnnn,您会发现没有传递对象引用,即使不阅读文档,也很容易得出结论,即唯一合理的行为是对当前线程进行操作。rua.sleep;对不起,我用的是帐单。此设备正在杀死我。Thread.sleeplong是一种静态方法,用于休眠当前线程。当前线程是执行代码的线程。因此,无论哪个线程调用sleep,都是睡眠线程。据我所知,你的假设似乎是正确的。你的意思是线程rua=新的rua;否则rua rua=新线程;不会编译。是的,你是对的。通过调试它并给线程命名,你可以很容易地检查它是调用的。通过一个线程实例睡眠,但最终暂停另一个线程有时是相当混乱的。
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