synchronized有什么作用?
synchronized是java中的一个关键字,可以用来修饰静态方法、非静态方法、代码块上,被synchronized所修饰的静态方法、非静态方法、代码块里的代码(我们暂称之为“临界区代码”)同一时间只能有一个线程来执行。多个线程经过“临界区代码”时,必须一个一个来。
synchronized锁的范围
那么问题就随之而来了,既然是经过“临界区代码”的多个线程之间要发生互斥,那这个互斥的范围不好确定啊,总不能以“代码”作为互斥范围吧。那用什么来作为互斥范围呢?
没错,synchronized使用时必须有一个指定的锁对象。每个执行“临界区代码”的线程必须先获取锁对象中的锁,获取锁成功之后才能去执行“临界区代码”。而这个锁对象就决定了互斥范围,也就是锁的范围。