繁体   English   中英

如果已经调用了另一个线程,则不调用静态方法

[英]Not calling a static method if another thread is already called it

我有一个静态方法,如果另一个线程调用它,我有兴趣立即返回它。
例如

public static void parseNetworkData() {  
   if(isRunning) {  
     return;
   }  
   // get and cache network data  
   // for use  
}  

我真的不想同步该方法,因为如果网络调用已经完成,则我不希望其他线程也这样做。
现在我不确定以下内容:
考虑到这是静态方法,定义/处理isRunning的最佳方法是什么?
我应该将其转换为实例方法吗?

我有一个静态方法,如果另一个线程调用它,我有兴趣立即返回它。

这听起来让我非常怀疑,但是您可以做到。 该方法是static不会对情况造成很大的影响,但是您可以通过任何方法应用同步或并发支持对象来管理线程之间的交互。 在这种情况下, java.util.concurrent.ReentrantLock可以方便地提供您所需的内容:

class MyClass {
    private static ReentrantLock networkDataLock = new ReentrantLock();

    public static void parseNetworkData() {  
        if (!networkDataLock.tryLock()) {
            // a different thread has the lock
            return;
        }
        try {
            // get and cache network data  
            // for use  
        } finally {
            // If the lock was successfully acquired then it must be
            // unlocked without fail before the method exits
            networkDataLock.unlock();
        }
    }  
}

您可以使用Lock

public static void parseNetworkData() {
    if(lockObj.tryLock()) {
       //Perform method stuff
       lockObj.unlock();
    }
}

如果锁已被锁定,则不会发生任何事情。 我认为,锁将是一个private static final变量。

使标志可变和静态

volatile static boolean isRunning

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM