如果变量用 public static修饰,那么这个变量会被放在JVM的方法区。如果是在多线程的环境下,那么这个变量应该是多个线程均可见的。在JVM被设置为-server模式时,JVM为了提升线程运行的效率,一直在私有堆栈中取值,这会导致不同步。解决办法就是使用volatile关键字修饰变量,强制JVM从公共内存取值。
我们模拟实现这样一个简单的场景:有一个银行类bank,里面存有用户账户的所有的钱(account)我们会通过线程(MyThread)向里面存钱(saveMoney)和取钱(getMoney)。 我们会依照线程同步方法、同步代码段和读写安全的顺序依次讲解,先看没有做任何处理时的情况: 同步方法: 先看bank类: class Bank{int account;public int ge
transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下。 transient transient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。 示例: class Test { transient int a; // 不会被持久化 int b; // 持久化 } 当