Java 内锁的工作原理
当两个不同的线程尝试同时访问get和set时,是否会因为锁定check object而以同步方式发生?由于这两种方法都是非静态的和同步的,任何时候都没有两个线程可以同时执行这两种方法,如果它们属于同一实例 是的,它将以同步方式发生,在这个类的实例中 创建Java 内锁的工作原理,java,Java,当两个不同的线程尝试同时访问get和set时,是否会因为锁定check object而以同步方式发生?由于这两种方法都是非静态的和同步的,任何时候都没有两个线程可以同时执行这两种方法,如果它们属于同一实例 是的,它将以同步方式发生,在这个类的实例中 创建Check c=newcheck()时 两个线程,即t1、t2尝试同时访问c.getChange()和c.setChange(),只有一个线程有权访问监视器(即实例c),另一个线程必须等待前一个线程完成工作并释放监视器 在这里,实例c是用于同步访
Check c=newcheck()时代码>
两个线程,即t1、t2
尝试同时访问c.getChange()
和c.setChange()
,只有一个线程有权访问监视器(即实例c
),另一个线程必须等待前一个线程完成工作并释放监视器
在这里,实例c
是用于同步访问的默认监视器,,因为这两种方法都是非静态的和同步的,如果它们属于同一实例,则在任何实例中都没有两个线程可以同时执行这两种方法
是的,它将以同步方式发生,在这个类的实例中
创建Check c=newcheck()时代码>
两个线程,即t1、t2
尝试同时访问c.getChange()
和c.setChange()
,只有一个线程有权访问监视器(即实例c
),另一个线程必须等待前一个线程完成工作并释放监视器
这里的实例c
是用于同步访问的默认监视器,只有一个线程可以持有对象的锁。然后,只有该线程可以进入该对象上的同步方法。没有其他线程可以访问该对象的任何同步方法
但是,线程可以通过调用
public class Check {
public boolean toChange = false;
public synchronized boolean getChange() {
return tochange
}
public synchronized setChange(boolean change) {
this.tochange = change
}
}
在第一个线程释放Check对象实例上的锁之前,其他线程将处于阻止状态。另外请注意,任何线程都可以输入不在对象上同步的类的方法
因此答案是是两个不同的线程不能同时访问get和set方法 只有一个线程可以持有对象的锁。然后,只有该线程可以进入该对象上的同步方法。没有其他线程可以访问该对象的任何同步方法
但是,线程可以通过调用
public class Check {
public boolean toChange = false;
public synchronized boolean getChange() {
return tochange
}
public synchronized setChange(boolean change) {
this.tochange = change
}
}
在第一个线程释放Check对象实例上的锁之前,其他线程将处于阻止状态。另外请注意,任何线程都可以输入不在对象上同步的类的方法
因此答案是是两个不同的线程不能同时访问get和set方法 感谢回复,所以它确实依赖于获取对象锁,在任何给定时间只能由一个线程获取。感谢回复,所以它确实依赖于获取对象锁,在任何给定时间只能由一个线程获取。