睡眠方法在 java 中如何工作
how does method sleep works in java
我有以下代码:
import java.security.SecureRandom;
public class Producer implements Runnable
{
private static final SecureRandom generator = new SecureRandom();
private final Buffer sharedLocation; // reference to shared object
// constructor
public Producer(Buffer sharedLocation)
{
this.sharedLocation = sharedLocation;
}
// store values from 1 to 10 in sharedLocation
public void run()
{
int sum = 0;
for (int count = 1; count <= 10; count++)
{
try // sleep 0 to 3 seconds, then place value in Buffer
{
Thread.sleep(generator.nextInt(3000)); // random sleep
sharedLocation.blockingPut(count); // set value in buffer
sum += count; // increment sum of values
System.out.printf("\t%2d%n", sum);
}
catch (InterruptedException exception)
{
Thread.currentThread().interrupt();
}
}
System.out.printf(
"Producer done producing%nTerminating Producer%n");
}
} // end class Producer
我不明白其中的 "try-catch" 部分:
方法 sleep() 不是将抛出 InterruptedException() 的方法,因此 try 块将终止并且 catch 块将执行吗?
那么我们如何在try块中的sleep()语句之后写语句,即他们不会执行吧?
当Thread.sleep
正常完成时,将执行任何后续语句。只有当线程在 sleep
之前或期间被中断时,这些语句才不会被执行。
注意try/catch应该是围绕循环的:按目前的情况,因为Thread.currentThread().interrupt()
,下一次循环迭代的休眠将立即被打断,然后你调用Thread.currentThread().interrupt()
,下一次循环迭代的sleep会立即被打断等
你也可以在循环中断后直接放弃:
try {
for (int count = 1; count <= 10; count++)
{
Thread.sleep(generator.nextInt(3000)); // random sleep
// ...
}
} catch (InterruptedException exception) {
Thread.currentThread().interupt();
}
我有以下代码:
import java.security.SecureRandom;
public class Producer implements Runnable
{
private static final SecureRandom generator = new SecureRandom();
private final Buffer sharedLocation; // reference to shared object
// constructor
public Producer(Buffer sharedLocation)
{
this.sharedLocation = sharedLocation;
}
// store values from 1 to 10 in sharedLocation
public void run()
{
int sum = 0;
for (int count = 1; count <= 10; count++)
{
try // sleep 0 to 3 seconds, then place value in Buffer
{
Thread.sleep(generator.nextInt(3000)); // random sleep
sharedLocation.blockingPut(count); // set value in buffer
sum += count; // increment sum of values
System.out.printf("\t%2d%n", sum);
}
catch (InterruptedException exception)
{
Thread.currentThread().interrupt();
}
}
System.out.printf(
"Producer done producing%nTerminating Producer%n");
}
} // end class Producer
我不明白其中的 "try-catch" 部分: 方法 sleep() 不是将抛出 InterruptedException() 的方法,因此 try 块将终止并且 catch 块将执行吗? 那么我们如何在try块中的sleep()语句之后写语句,即他们不会执行吧?
当Thread.sleep
正常完成时,将执行任何后续语句。只有当线程在 sleep
之前或期间被中断时,这些语句才不会被执行。
注意try/catch应该是围绕循环的:按目前的情况,因为Thread.currentThread().interrupt()
,下一次循环迭代的休眠将立即被打断,然后你调用Thread.currentThread().interrupt()
,下一次循环迭代的sleep会立即被打断等
你也可以在循环中断后直接放弃:
try {
for (int count = 1; count <= 10; count++)
{
Thread.sleep(generator.nextInt(3000)); // random sleep
// ...
}
} catch (InterruptedException exception) {
Thread.currentThread().interupt();
}