java8线程高级-volatile关键字与内存可见性介绍

 时间:2024-10-15 06:00:04

1、线程可见性测试:package com.gwolf;public class TestVolatile { public static void main(String[] args) { ThreadDemo threadDemo = new ThreadDemo(); new Thread(threadDemo).start(); while (true) { if(threadDemo.isFlag()) { System.out.println("-------------------"); break; } } }}class ThreadDemo implements Runnable { private boolean flag = false; @Override public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } flag = true; System.out.print("flag = " + isFlag()); } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }}

java8线程高级-volatile关键字与内存可见性介绍

3、程序结果说明主线程不能得到子线程中的值。原因是线程之间没有共享变量,每个线程有一块独立的内存空间

java8线程高级-volatile关键字与内存可见性介绍

5、使用同步锁解决,让程序去主存中读取数据package com.gwolf;public clas衡痕贤伎s TestVolatile { pu芟鲠阻缒blic static void main(String[] args) { ThreadDemo threadDemo = new ThreadDemo(); new Thread(threadDemo).start(); while (true) { synchronized (threadDemo) { if (threadDemo.isFlag()) { System.out.println("-------------------"); break; } } } }}class ThreadDemo implements Runnable { private boolean flag = false; @Override public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } flag = true; System.out.print("flag = " + isFlag()); } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }}

java8线程高级-volatile关键字与内存可见性介绍

7、使用volatile关键字解决内存可见性问题,当多个线程进行共享数据时,可以保证内存中的数据可见package com.gwolf稆糨孝汶;public class TestVolatile { public static void main(String[] args) { ThreadDemo threadDemo = new ThreadDemo(); new Thread(threadDemo).start(); while (true) { if (threadDemo.isFlag()) { System.out.println("-------------------"); break; } } }}class ThreadDemo implements Runnable { private volatile boolean flag = false; @Override public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } flag = true; System.out.print("flag = " + isFlag()); } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }}

java8线程高级-volatile关键字与内存可见性介绍
  • 如何使用TypeScript定义类和方法并进行调用方法
  • RDP弱口令病毒怎么查杀呢?
  • WindowsMS12-020漏洞报告
  • 如何在windows10中禁用防火墙连接安全规则
  • Win7系统如何使用Tracert功能
  • 热门搜索
    智慧旅游 凉拌猪头肉 脚酸是怎么回事 怎么样让眼睛变大 团队旅游 宁波旅游必去景点 内存不够用怎么办 北京郊区旅游 c1可以开什么货车 银川旅游