当前位置: 首页 > 面试题库 >

如果Thread.sleep是静态的,那么各个线程如何知道它已进入睡眠状态?

仲孙英才
2023-03-14
问题内容

我对Thread.sleep()方法有些困惑。如果Thread.sleep()是静态方法,两个线程如何知道哪个进入睡眠状态。例如,在下面的代码,我有两个三Threads
maintt1。我Thread.sleep()总是打电话。不t.sleep()。这是否意味着Thread.sleep()使当前线程进入睡眠状态?这意味着Thread实例通过调用static方法自行进入睡眠状态。如果t1想t睡觉怎么办。那应该不可能正确吗?

public class ThreadInterrupt {

    public static void main(String[] args) throws InterruptedException {

        System.out.println("Starting.");

        Thread t  = new Thread(new Runnable(){

            @Override
            public void run() {
                Random ran = new Random();

                for (int i = 0; i < 1E8; i++) {

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        System.out.println("we have been interrupted");
                        e.printStackTrace();
                    }
        });

        Thread t2 = new Thread(new Runnable() {
                 public void run() {
                         //some stuff
                 }
        });    
        t.start();
        t2.start();

        Thread.sleep(500);
        t.interrupt();
        t.join();

        System.out.println("Finished.");
    }

}

问题答案:

这是否意味着Thread.sleep()使当前线程进入睡眠状态?

是。只有当前线程可以做到这一点。

如果t1想让t睡觉怎么办。那应该不可能正确吗?

对。您可以设置一个volatile boolean标志,该标志将导致另一个线程被调用,Thread.sleep(...)但另一个线程无法使一个线程进入睡眠状态。

 volatile boolean shouldSleep = false;
 ...
 // check this flag that might be set by another thread to see if I should sleep
 if (shouldSleep) {
     Thread.sleep(...);
 }


 类似资料:
  • 问题内容: 这会使当前的UI线程休眠吗? 问题答案: 如果要在ui线程上调用sleep,它将阻塞ui线程。不要在ui线程上调用sleep。您不应该阻止ui线程。 http://developer.android.com/reference/java/lang/Thread.html http://docs.oracle.com/javase/tutorial/essential/concurren

  • 问题内容: 我有产生新线程的执行主线程。在main()的执行主线程中,我正在调用。何时获得 未处理的异常 类型? 我不确定为什么会得到这个。我以为这是因为我需要对主线程的引用,所以我继续并通过进行了引用。 这不是让线程休眠的方法吗?我需要做的是让主线程等待/睡眠/延迟,直到它再次需要工作为止。 问题答案: 您看到的是编译错误,原因是您没有正确处理检查的异常(在这种情况下)。处理意味着执行以下操作之

  • 问题内容: 我想让系统进入睡眠或hibernate状态,这是两种不同的选择。 我将如何使用API​​进行此操作,我真的不想使用Process,并且这不允许我选择执行此操作所需的方法。 问题答案: 或者,如果您喜欢系统调用:

  • 问题内容: 这里有两个代码块完成(我认为是)同一件事。 我基本上是在尝试学习如何使用Java 1.5的并发性来摆脱Thread.sleep(long)。第一个示例使用ReentrantLock,第二个示例使用CountDownLatch。我想要做的事情的关键是让一个线程进入睡眠状态,直到条件在另一个线程中得到解决。 ReentrantLock在我用来确定是否唤醒另一个线程的布尔值上提供了一个锁,然

  • 我正在研究计算机硬件,在那里我们了解到使用硬件计时器比软件延迟获得更准确的结果。我已经在汇编中编写了1毫秒的软件延迟,我可以启动一个进程,使用这个延迟每毫秒重复一次,并使用计数器每100毫秒做一些其他事情,这种技术不如使用我现在要使用的硬件内置的硬件计时器准确。 所以我想知道Java内置的计时有多精确?我们有< code > system . current time millis 和< code

  • 问题内容: 有没有让goroutine永远睡眠的API ? 换句话说,我希望我的项目始终运行,除非停止它。 问题答案: “睡眠” 您可以使用许多永久阻塞的构造,而不会“吃掉” CPU。 例如,不带任何(且不带)的a: 或从没有人发送任何东西的渠道接收: 或从频道接收也会永远阻止: 或在频道上发送也会永远被阻止: 或锁定已经锁定的: 戒烟 如果您确实想提供一种退出方法,则可以通过一个简单的渠道来完成