线程监视器和同步
同步化线程住要是为了防止出现并行存取问题
有3类类型的代码能够被同步化:
 类方法。
 实例方法。
 一个方法中的任何代码块。
如果代码是一个class方法,则可以在代码块中用关键字sychronized从类中获得监视器;
如果代码是一个instance方法,则可以在代码块中用关键字sychronized从实例获得监视器;
关键字sychronized保证了一次只有一个线程执行对象或者类的代码。
变量不能使用关键字synchronized,这就意味着在下面的代码中,尽管一个线程可能处于
updatebalance()代码执行过程中,另外一个线程也会来读取余额。
class Account {
 int balance;
 sychronized void updatebanlance(int amount)  {
  balance+=amount;
 }
}
修改为
class Account {
 private int balance;
 synchronized int getBalance() {
  return balance;
 }
 sychronized void setBalance(int newBalance) {
  balance=newBalance;
 }
 sychronized void updateBalance(int amount) {
  setBalance(getBalance()+amount);
 }
在这段程序里面,当updateBalance()方法在改变它的值的时候,没有其它的线程能够存取balance
域(除非它撤消了访问权限)