本问主要知识点:
volatile 关键字
transient关键字
1.volatile:当多个线程进行操作共享数据时,可以保证内存中的数据可见,相对与synchronized是一种轻量级的锁
注意:1)volatile 不具有互斥性;2)不能保证变量的原子性
java.util.concurrent.atomic.包下提供了常用的原子变量:1)通过volatile保证内存可见性 2)CAS(compare-and-sawp)算法保证数据的原子性//测试方法 public class TestVolatile { public static void main(String[] args){ ThreadDeomo threadDeomo = new ThreadDeomo(); new Thread(threadDeomo).start(); while (true){ if(threadDeomo.getFlag()){ System.out.println("-----------------------------------"); break; } /* try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } while (true){ synchronized(threadDeomo){ if(threadDeomo.getFlag()){ System.out.println("-----------------------------------"); break; } } } */ } } static class ThreadDeomo implements Runnable{ private volatile boolean flag ; public boolean getFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void run() { flag =true; System.out.println("flag="+getFlag()); } } }
2.transient:当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。