synchronized关键字加在方法上,锁住的是对象,是调用这个方法的对象。
当不同的线程使用同一个对象调用此方法时,才会对线程阻塞。
例如:
有这样一个类
class Test {
public synchronized void test() {
//ToDo something
}
}
当我们 Test test = new Test(),再将这个test对象传递给开启的几个不同的线程,然后在开启的几个不同的线程里使用 test.test(),就会被阻塞。
而如果我们在开启的几个不同线程里去new Test(),或者传递给各个线程的test对象不是同一个,则线程不会被阻塞。
本文深入解析了Java中synchronized关键字的作用机制,特别是当其应用于方法级别时如何实现对象级的锁,以及不同线程间如何通过同一对象调用该方法时触发线程阻塞的情况。文章还探讨了在不同线程中创建新对象或使用不同对象时,synchronized锁的无效性。
337

被折叠的 条评论
为什么被折叠?



