bim*_*wla 11 java multithreading
public class CreateThreadRunnableExample implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Child Thread : " + i);
try {
Thread.sleep(50);
} catch (InterruptedException ie) {
System.out.println("Child thread interrupted! " + ie);
}
}
System.out.println("Child thread finished!");
}
public static void main(String[] args) {
Thread t = new Thread(new CreateThreadRunnableExample(), "My Thread");
t.start();
for (int i = 0; i < 5; i++) {
System.out.println("Main thread : " + i);
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
System.out.println("Child thread interrupted! " + ie);
}
}
System.out.println("Main thread finished!");
}
}
Run Code Online (Sandbox Code Playgroud)
在这个程序中,两个睡眠方法被用于不同的时间.. ,,,所以如果主线程运行时间,那么子线程必须运行2次.但它只运行一次....它我们采取runnable或运行的概念state ....然后当主线程结束时,那么2个子线程将处于就绪状态,那么为什么只有一个子线程运行.
该sleep方法不是 100% 时间准确,如JavaDoc中所述:
public static void sleep(long millis) 抛出 InterruptedException
使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。该线程不会失去任何监视器的所有权。
所以基本上,代码有时可能按预期工作,有时则不然。
另外,你似乎只生了 1 个孩子,那你为什么要生 2 个呢?
编辑:理论上是的,子线程应该在线程main休眠时执行两次。话虽如此,正如 JavaDoc 中所解释的,该sleep方法执行的准确性取决于运行它的系统,因此有时您可能会使其按预期工作,有时则不然。例如,您可能会遇到这样的场景:main线程休眠97 毫秒而不是 100 毫秒,而子进程休眠 53 毫秒。这将导致子进程只执行一次。
另一种选择是这样做
while (currentTime <= timeNeededToElapse) { currentTime=... }:这会导致一个紧密的 while 循环,可以提供更好的控制,但据我所知,它仍然不是 100% 准确,更不用说您将消耗 CPU 周期来有效地执行任何操作,因此要谨慎使用。
| 归档时间: |
|
| 查看次数: |
63806 次 |
| 最近记录: |