作者回复: 不要考虑性能,只要不死锁就不算有问题。新版的JVM已经对synchronized做了很多优化了,当用就用即可。
使用场景就是避免多个线程在同一个对象上执行代码,操作相同的数据,造成数据不一致。
举个简单的例子,同一个银行账户,取钱100和银行的账户余额减少100,程序在进行取钱操作和操作账户余额的操作时,别的线程是不可以操作账户余额的。如果多个线程同时执行这两个操作,没有synchronized保护的情况下,最后可能会数据和取了10次100块钱,结果账户余额只扣了900。
再举个例子,比如说账户里只有100块钱,结果起了100000个线程同时取钱,即使先做检查,再从账户扣钱,再执行取钱操作,还是有很大概率会让取钱操作执行多次的。