Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取同步方法在Java中被阻止的时间_Java_Multithreading_Time_Concurrency_Synchronization - Fatal编程技术网

获取同步方法在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:即使锁没有被争用,也需要一定的时间来获取,并且所需的时间可能会有所不同,这取决于锁是否被多个线程获取过。您可以做一些实验来找出一个基线获取时间,然后减去它,以更好地了解线程实际等待其他线程的时间。