之所以会出现《多线程(四)线程的同步之线程安全问题》文章中的问题,其原因是因为run方法体不具有同步安全性:程序中有两条并发线程在修改Account对象。一个线程进入方法准备减少取钱金额,但是还没减少取钱金额时,另一个线程由于判断金额没有减少,故可以进入取钱方法体中,因而造成余额负数情况出现。
为了解决这个问题,Java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的同步方法就是同步代码块。同步代码块的语法格式如下:
synchronized(obj)
{
...
//此处的代码就是同步代码块
}
上面语法格式中synchronized后括号里的obj就是同步监视器,上面代码的含义是:线程开始执行同步代码块之前,必须先获取对同步监视器的锁定。
任何时刻只能有一条