rog*_*ht9 0 java multithreading
最近我在某处读到使用方法run()和sleep()不能保证我们Java中一个线程的运行和休眠状态.有哪些方法我可以明确地演示它?
最近我在某处读到使用run()和sleep()方法无法保证Java中线程的运行和休眠状态.
如果run()调用了线程的方法并且线程正在旋转(即不写入日志文件或从套接字读取)但完全执行CPU任务,那么它将处于该RUNNABLE状态.但是,OS/CPU可能正在忙于做其他事情,因此无法保证线程实际上在任何一个时间点都在工作.当然,仅仅因为你编写了这个run()方法并不意味着线程实际上已经开始或者任何东西.
如果你打电话,Thread.sleep(...)那么线程将处于一种TIMED_WAITING状态.但是,线程可能会被另一个线程中断并唤醒,或者睡眠时间当然可能已经过期.
该线程状态是:
synchronized块例如.Object.wait();例如.Object.wait(timeoutMillis)有什么办法可以明确地证明吗?
您当然可以执行以下操作:
new Thread(new Runnable() {
    public void run() {
        long x = 0;
        for (long y = 0; y < Long.MAX_VALUE; y++) {
            x += y;
        }
        System.out.println("it will never get here of course: " + x);
    }
}, "Running-Thread").start();
Run Code Online (Sandbox Code Playgroud)
一旦线程启动,它将旋转并处于该RUNNABLE状态.您可以使用jconsole查看所有线程状态.
new Thread(new Runnable() {
    public void run() {
        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            // always a good pattern
            Thread.currentThread().interrupt();
            e.printStackTrace();
            return;
        }
    }
}, "Sleeping-Thread").start();
Run Code Online (Sandbox Code Playgroud)
线程启动后,它将进入睡眠状态并显示处于TIMED_WAITING状态.