共享资源在多线程下要保证安全,从而引入并发锁,在多进程中,则为分布式锁。
多线程环境里面,假如有一个共享int变量i
。如下两个线程都对,i++,那么结果有可能是1,有可能是2
那么此时就可以使用synchronized 关键字。
但是加锁后,并行就变成了串行,降低了效率,那么我们就要考虑锁的粒度,实际上就是锁的范围。比如数据库中,select …for update,那我们是锁某一行的数据。
如何控制synchronized 锁的粒度呢?
锁的范围:对象锁、类锁。 类锁范围更大。
所以,我们的作用范围是取决于,括号里面的作用域。
比如,像下面这样
那么它的作用范围是哪里面?我们认为,它和没有加锁一样,因为每次调用这个方法,都是会生成一个新的对象。<