我有一个应用程序,需要阻止所有网络活动,直到完成一个特定的过程为止。在那之后,所有线程都应该可以随意执行网络活动。封锁对我来说是一个弱点,我不确定自己是否做得对。我相信我所拥有的会起作用,但是我的直觉告诉我,我不应该这样。

public static class BlockingClass implements ReentrantLock
{
    private static BlockingClass sBlockingClass = new BlockingClass();

    static
    {
        sBlockingClass.lock();
    }


    public void ProcessThatNeedsToWait()
    {
        while(sBlockingClass.isLocked());

        Continue();
    }


    public void ProcessThatNeedsToBeWaitedFor()
    {
         DoInitWork();

         sBlockingClass.unlock();
    }
}

最佳答案

按照现在,您正在使用“忙于等待”和“同时(...)继续”
更好的解决方案将是将您的任务作为可运行对象执行,并且
将它们放在一个管理器类中,将回调传递给第一个任务,并将每个新任务添加到管理器内部的列表中(也就是说,回调尚未返回时),只要回调返回遍历该列表并以它是自己的线程。
当然,该解决方案仅适用于我从您所面临的问题中可以理解的内容,以防万一,请添加更多详细信息\代码,以便我可以更好地理解您要解决的问题。

07-24 15:52