java中的阻塞

java中的阻塞,java,android,blocking,Java,Android,Blocking,我有一个应用程序,我需要阻止所有的网络活动,直到一个特定的进程完成。之后,所有线程都应该可以随意执行其网络活动。阻塞对我来说是一个弱点,我不确定我是否做对了。我相信我所拥有的会起作用,但我的直觉告诉我,我不应该这样做 public static class BlockingClass implements ReentrantLock { private static BlockingClass sBlockingClass = new BlockingClass(); stat

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

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();
    }
}

根据,现在您正在使用“忙等待”和“while(…)continue”
更好的解决方案可能是将您的任务作为可运行和 将它们放在一个管理器类中,将回调传递给第一个任务,并在回调返回遍历列表并使用自己的线程启动每个runnable时,将每个新任务添加到管理器内的列表中(即回调尚未返回)。

当然,该解决方案仅适用于我从您面临的问题中所能理解的情况,如果不合适,请添加更多详细信息\代码,以便我能够更好地理解您试图解决的问题。

根据现在的情况,您正在使用“忙等待”和“同时(…)继续”
更好的解决方案可能是将您的任务作为可运行和 将它们放在一个管理器类中,将回调传递给第一个任务,并在回调返回遍历列表并使用自己的线程启动每个runnable时,将每个新任务添加到管理器内的列表中(即回调尚未返回)。

当然,该解决方案仅适用于我从您所面临的问题中所能理解的情况,如果不合适,请添加更多细节\代码,以便我能够更好地理解您试图解决的问题。

我将使用
java.util.concurrent
类之一。您能就如何访问网络提供更多信息吗?也许这是一个实现ConnectionPool的解决方案,当一个特殊线程获得连接时,它会阻止获取网络连接。@commonware我使用了java.util.concurrent.Phaser。在onAdvance中,我基本上只返回{first thread completed},感谢您为我指明了正确的方向^_^@马丁克鲁格感谢你的建议,但这个解决方案还不够。该解决方案允许我在初始化线程启动后阻塞,但在它启动之前呢?我仍然需要网络线程等待初始化线程完成,无论初始化器是否已启动。@KairisCharm:我不知道您的
minSdkVersion
是什么,但我认为
Phaser
对于API级别21左右是新的。我会使用
java.util.concurrent
类之一,.您能就如何接入网络提供更多信息吗?也许这是一个实现ConnectionPool的解决方案,当一个特殊线程获得连接时,它会阻止获取网络连接。@commonware我使用了java.util.concurrent.Phaser。在onAdvance中,我基本上只返回{first thread completed},感谢您为我指明了正确的方向^_^@马丁克鲁格感谢你的建议,但这个解决方案还不够。该解决方案允许我在初始化线程启动后阻塞,但在它启动之前呢?我仍然需要网络线程等待初始化线程完成,无论初始化器是否已启动。@KairisCharm:我不知道您的
minSdkVersion
是什么,但我认为
Phaser
对于API级别21左右是新的。