美文网首页
1.为什么使用interrupt()

1.为什么使用interrupt()

作者: J_Feng | 来源:发表于2020-11-29 19:08 被阅读0次

package com.yjyz.common.virtual.callcenter.web;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

/**
* @Description:
 * q1:以下代码为什么不会结束线程?
 * a:当开启了一个线程 CPU 会去读取 flag 属性,而flag在线程之外,cpu会首先找到flag所在对象堆中的地址,
 * 然后再去找flag的地址,而while方法中又是空方法,Jvm会认为你的方法没啥卵用,为了节省开销,
 * 从而隐式定义了一个 bool = flag,不用每次再去寻找
 * 而之后的flag 的变更,隐式的 bool 值并没有改变,所以导致了没有结束该线程
 *
 * q2:如果while空方法体,注释sleep 为什么又会结束?(过)
 * a:理论上说,80%先执行主线程,再执行子线程,但是自线程依然可能会执行,但是没人能证实为什么会结束
 *
 * q3:为什么增加 System.out.println(i);会自动结束方法呢?
 * a:Jvm存在方法调用,Jvm会认为,存在方法溢出,不会去自动优化
 *
 * q4:为什么不调用System.out.println(i); 仅仅使用i++;又会停止呢?
 * a:不存在方法溢出
* @Param:
* @return:
* @Author: Feng/18772115902
* @Date:
*/
public class Test {

    private static boolean flag = true;

    private static Thread thread;

    private static int i = 0;

    public static void main(String[] args) throws InterruptedException {
        myThread();
        thread.start();
//        thread.sleep(100);
        flag = false;

    }

    public static void myThread(){
            thread = new Thread(){
            @Override
            public void run(){
                while (flag){
                    i++;
//                    System.out.println(i);
                }
            }
        };
    }
}

相关文章

网友评论

      本文标题:1.为什么使用interrupt()

      本文链接:https://www.haomeiwen.com/subject/iiuhwktx.html