我测试时,java thread.sleep()不会使其他线程可以使用处理器时间

Jer*_*Lin 1 java multithreading thread-sleep

当我使用时Thread.sleep(),我发现当前线程调用sleep()方法时,其他线程无法获取处理器时间来调用自己的.但我反过来sleep()Oracle的文档中获取方法的信息,所以我很困惑.

这是我的代码:

class ThreadTest {

    private Runnable mRunnable = () -> {
        println("from runnable start run");
        println("from runnable start end");
    };

    private class TestThread extends Thread {
        @Override
        public void run() {
            super.run();
            println("from Thread start run");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            println("from Thread end");
        }
    }


    private void println(String info) {
        System.out.println(getDate() + " : "+info);
    }

    private String getDate() {
        SimpleDateFormat sdf = new SimpleDateFormat();// ?????
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss a");// a?am/pm???
        Date date = new Date();// ??????
        return sdf.format(date);
    }

    void testThread() {
      TestThread thread=  new TestThread();
      thread.run();
        for (int i = 0; i < 10; i++) {
            new Thread(mRunnable).run();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是

2018-11-09 18:15:20 PM : from Thread start run

2018-11-09 18:15:23 PM : from Thread end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end

2018-11-09 18:15:23 PM : from runnable start run

2018-11-09 18:15:23 PM : from runnable start end
Run Code Online (Sandbox Code Playgroud)

希望有人能提供帮助

kin*_*nak 7

thread.run();不会启动一个线程.它只是在当前线程的上下文中执行run方法.

你需要打电话 thread.start()

同样,你需要调用new Thread(mRunnable).start(); 在一个单独的线程中运行runnable.