2 qq 36230119 qq_36230119 于 2017.01.07 16:17 提问

线程学习遇到的一个问题

这个synchronized代码块是如何实现isContinueRun线程之间可见的

    public class Service{
        private boolean isContinueRun;
        public void runMethod(){
            String anyString = new String();
            while(isContinueRun == true){
                synchronized(anyString){}
            }
        }
        public void stopMethod(){
            this.isContinueRun = false;
        }
    }

2个回答

u010528826
u010528826   2017.01.07 16:40
已采纳

单从你上面贴出的代码来看
isContinueRun 在线程之间应该是不可见的。
而且你runMethod()中的while语句应该进不去吧。boolean 的默认值是false。

qq_36230119
qq_36230119 我已经搞清楚了,在调用synchronized之前,线程堆栈会清空,也就是下次执行while时会从新将主内存的值赋给线程内存中,也就是说下次while判断时的值为主内存的最新值。从而实现变量线程间可见,谢谢你回答
11 个月之前 回复
Gun99
Gun99   2017.01.07 16:57

改成静态同步变量可以共享,否则同步也无意义。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!