获取同步方法在Java中被阻止的时间
我有一个由不同线程调用的同步方法,它的执行在对同一对象的方法的调用之间是互斥的。我想知道,在方法被阻止的情况下,它被阻止的时间:获取同步方法在Java中被阻止的时间,java,multithreading,time,concurrency,synchronization,Java,Multithreading,Time,Concurrency,Synchronization,我有一个由不同线程调用的同步方法,它的执行在对同一对象的方法的调用之间是互斥的。我想知道,在方法被阻止的情况下,它被阻止的时间: 公共类ManagerImpl实现管理器{ 公共同步的长进入ramo(){ 移动某物 //此方法必须返回带有阻塞时间的长类型。 //如果未被阻止,则返回-1。 } } 如果可以更改此方法的源代码,可以手动插入 public long entrarEnTramo() { long started = System.nanoTime(); synchroni
公共类ManagerImpl实现管理器{
公共同步的长进入ramo(){
移动某物
//此方法必须返回带有阻塞时间的长类型。
//如果未被阻止,则返回-1。
}
}
如果可以更改此方法的源代码,可以手动插入
public long entrarEnTramo() {
long started = System.nanoTime();
synchronized (this) {
long taken = System.nanoTime() - started;
movesomething();
return taken;
}
}
但请注意,这并不能真正告诉您它是否被阻塞,只是时间问题。
你可能可以从花费的时间量中看出区别
如果没有,您将不得不(然后您还可以实现锁定超时,这是
synchronized
不提供的)。非常感谢您,但是我如何检查该方法是否已被可重入锁定
对象阻止?@margobra8,Re,“如何检查该方法是否已被ReentrantLock
对象阻止?“同样的方式!在尝试获取锁之前立即捕获时间戳,在获取锁之后立即捕获第二个时间戳。感谢您的帮助@Desmirchednote:即使锁没有被争用,也需要一定的时间来获取,并且所需的时间可能会有所不同,这取决于锁是否被多个线程获取过。您可以做一些实验来找出一个基线获取时间,然后减去它,以更好地了解线程实际等待其他线程的时间。