2.3.2解决同步死循环
Posted 成功的路上总是离不开贵人的帮助,名师的指点和小人的刺激。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.3.2解决同步死循环相关的知识,希望对你有一定的参考价值。
测试如下
package com.cky.test; /** * Created by edison on 2017/12/9. */ public class PrintString implements Runnable{ private boolean isContinuePrint = true; public boolean getContinuePrint() { return isContinuePrint; } public void setContinuePrint (boolean isContinuePrint) { this.isContinuePrint = isContinuePrint; } public void printStringMethod() { while(isContinuePrint) { try { System.out.println("run print"+Thread.currentThread().getName()); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } @Override public void run() { printStringMethod(); } }
package com.cky.test; /** * Created by edison on 2017/12/9. */ public class Run { public static void main(String[] args) { PrintString printString = new PrintString(); new Thread(printString).start(); System.out.println("我要停止他 stop"+ Thread.currentThread().getName()); printString.setContinuePrint(false); } }
我要停止他 stopmain
run printThread-0
但当上面的例子代码的格式运行在-server服务器的模式中64bit的JVM上时,会出现死循环
解决的方案时使用volatile关键字
关键字volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值
以上是关于2.3.2解决同步死循环的主要内容,如果未能解决你的问题,请参考以下文章
代码重构 & JDTWindows命令行运行Java文件陷入死循环解决办法