在Volatile修正案例中,isInterrupted()似乎是没有必要的??

来源:5-12 停止失效

Small_6

2019-11-20

在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("生产者停止运行");
    }
}

   


写回答

1回答

悟空

2019-11-20

满了的时候put方法会检测,但是没满的时候也需要检查中断。
1
10
悟空
回复
MarcoLiLiLi
不满也可以响应中断的,put内部用的是lock.lockInterruptibly();,如果已经发生中断,那么这行代码会直接响应中断。
2020-10-29
共10条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程