synchronized静态和非静态
时间: 2023-04-24 20:06:31 浏览: 99
synchronized关键字可以用于静态方法和非静态方法。静态方法使用synchronized关键字时,锁定的是类的Class对象;非静态方法使用synchronized关键字时,锁定的是对象的实例。在多线程环境下,使用synchronized关键字可以保证同一时刻只有一个线程访问被锁定的代码块,从而避免了线程安全问题。
相关问题
静态 synchronized 方法和非静态 synchronized 方法之间的调用互斥么?
不互斥。静态 synchronized 方法和非静态 synchronized 方法使用的是不同的锁,因此它们之间的调用并不会产生互斥效果。静态 synchronized 方法使用的是类锁,而非静态 synchronized 方法使用的是对象锁。因此,即使一个线程正在调用静态 synchronized 方法,其他线程仍然可以同时调用非静态 synchronized 方法,反之亦然。
synchronized修饰静态方法和非静态方法有区别
是的,synchronized修饰静态方法和非静态方法有区别。
当synchronized修饰非静态方法时,它锁定的是该方法所属对象的实例,也就是说,每个对象实例都有自己的锁。当一个线程进入该方法时,它会尝试获取该对象实例的锁,如果被其他线程占用,则该线程会被阻塞,直到获取到锁才能执行方法。
当synchronized修饰静态方法时,它锁定的是该方法所属的类的Class对象,而不是实例对象。因此,不管有多少个对象实例,它们都共享同一个锁。当一个线程进入该方法时,它会尝试获取该类的Class对象的锁,如果被其他线程占用,则该线程会被阻塞,直到获取到锁才能执行方法。
因此,synchronized修饰静态方法和非静态方法的区别在于锁定的对象不同,这也决定了它们的适用场景不同。通常来说,当一个共享的资源需要被多个线程访问时,使用synchronized修饰静态方法更加合适,而当一个对象的某些方法需要被同步访问时,使用synchronized修饰非静态方法更加合适。
阅读全文