Java多线程之volatile关键字《一》
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java多线程之volatile关键字《一》,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2472字,纯文字阅读大概需要4分钟。
内容图文
![Java多线程之volatile关键字《一》](/upload/InfoBanner/zyjiaocheng/831/296d24121833413badeae07807cb0ad0.jpg)
关键字volatile的主要作用是使变量在多个线程间可见。
1.关键字volatile与死循环
如果不是在多继承的情况下,使用继承Thread类和实现Runnable接口在取得程序运行的结果上并没有什么太大的区别。如果一旦出现“多继承”的情况,则用实现Runnable接口的方式来处理多线程的问题就是很有必要的。
下面我们用实现Runnable接口的的方式来理解多线程的使用,也看实验volatile关键字在并发情况下的一些特性。
1.1创建一个PrintString类:
package edu.ymm.about_volatile; public class PrintString { private boolean isContinuePrint = true; public boolean isContinuePrint() { return isContinuePrint; } public void setContinuePrint(boolean isContinuePrint) { this.isContinuePrint = isContinuePrint; } public void printStringMethod() { try { while(isContinuePrint == true) { System.out.println("run printStringMethod threadName" + Thread.currentThread().getName()); Thread.sleep(1000); } }catch (InterruptedException e) { e.printStackTrace(); } } }
1.2创建一个Test测试类:
package edu.ymm.about_volatile; public class Test { public static void main(String[] args) { PrintString printString = new PrintString(); printString.printStringMethod(); System.out.println("我要停止它! stopThread=" + Thread.currentThread().getName()); printString.setContinuePrint(false); } }
执行结果如下:
程序开始运行,根本就停不下来,结果如上图所示,停不下来的原因主要就是mian线程一直在处理while()循环,导致程序不能继续执行后面的代码。所以得用多线程来解决。
2.解决同步死循环
2.1创建PrintString类如下:
package edu.ymm.about_volatile; public class PrintString implements Runnable { private boolean isContinuePrint = true; public boolean isContinuePrint() { return isContinuePrint; } public void setContinuePrint(boolean isContinuePrint) { this.isContinuePrint = isContinuePrint; } public void printStringMethod() { try { while(isContinuePrint == true) { System.out.println("run printStringMethod threadName" + Thread.currentThread().getName()); Thread.sleep(1000); } }catch (InterruptedException e) { e.printStackTrace(); } } @Override public void run() { printStringMethod(); } }
2.2创建Run测试类如下:
package edu.ymm.about_volatile; public class Run { public static void main(String[] args) { PrintString printString = new PrintString(); new Thread(printString).start(); System.out.println("我要停止它! stopThread=" + Thread.currentThread().getName()); printString.setContinuePrint(false); } }
执行结果如下:
但是,上面的代码运行在-server服务器的64bit的JVM上时,会出现死循环,解决办法就是volatile.
关键字volatile的作用就是强制从公共栈里面取得变量的值,而不是从线程私有数据栈中取得变量的值。
内容总结
以上是互联网集市为您收集整理的Java多线程之volatile关键字《一》全部内容,希望文章能够帮你解决Java多线程之volatile关键字《一》所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。