在Volatile修正案例中,while循环似乎不需要判断isInterrupted()也可以停止运行,那么判断isInterrupted是否是没有必要的? 即便是加了isInterrupted()判断,异常却是由storage.put(num);抛出而并不是isInterrupted()方法跳过了while。而storage.put(num);发生阻塞不是在while中吗?似乎这种循环阻塞的情况不是不需要在while处判断isInterrupted()吗??
下边贴出我的 Volatile修正demo中生产者的run方法 参考。
// Volatile修正demo中生产者的run方法
@Override
public void run() {
int num = 0;
try {
// 似乎并不需要判断(响应)停止期望,本线程也可以异常停止.
// !Thread.currentThread().isInterrupted()
while (num <= 10000 ) {
if (num % 100 == 0) {
System.out.println("100的倍数放入仓库 num = " + num);
storage.put(num); // InterruptedException
}
num++;
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("生产者停止运行");
}
}