synchronized关键字加在方法上,锁住的是对象,是调用这个方法的对象。
当不同的线程使用同一个对象调用此方法时,才会对线程阻塞。
例如:
有这样一个类
class Test { public synchronized void test() { //ToDo something } }
当我们 Test test = new Test(),再将这个test对象传递给开启的几个不同的线程,然后在开启的几个不同的线程里使用 test.test(),就会被阻塞。
而如果我们在开启的几个不同线程里去new Test(),或者传递给各个线程的test对象不是同一个,则线程不会被阻塞。