1. volatale 关键字 -内存可见性

package com.gf.demo01;

/**
 * 一、volatile 关键字:但多个线程进行操作共享数据时,可以保证内存中数据可见性。
 *
 */
public class TestVolatile {

	public static void main(String[] args) {
		ThreadDemo td = new ThreadDemo();
		new Thread(td).start();
		
		while(true){
			if(td.isFlag()){
				System.out.println("----------");
				break;
			}
		}
		
		//解决方法1: 加同步锁,但是效率低
		/**
		while(true){
			synchronized(td){
				if(td.isFlag()){
					System.out.println("----------");
					break;
				}
			}
			
		}*/
		
	}
	
}

class ThreadDemo implements Runnable{

	//private boolean flag = false;
	
	//解决方法二 : 使用volatile
	private volatile boolean flag = false;
	
	@Override
	public void run() {
		try {
			Thread.sleep(200);
			flag = true;
			System.out.println(flag);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	
	
}
原文地址:https://www.cnblogs.com/huanchupkblog/p/8037571.html