gpt4 book ai didi

android - 协调两个同步适配器的信号量导致 InterruptedException

转载 作者:行者123 更新时间:2023-11-30 02:35:28 24 4
gpt4 key购买 nike

我有两个同步适配器,我希望每个同步适配器都等到另一个同步适配器完成后再开始执行。我对信号量使用了以下技术:

public class SyncerOne extends AbstractThreadedSyncAdapter {
protected static Semaphore semaphore = new Semaphore(1);
...
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult)
{
semaphore.acquire();
doMyStuff();
semaphore.release();
}

public static Semaphore getSemaphore() {
return semaphore;
}


public class SyncerTwo extends AbstractThreadedSyncAdapter {
...
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult)
{
Semaphore semaphore = SyncerOne.getSemaphore();
semaphore.acquire();
doMyStuff();
semaphore.release();
}

当没有人需要等待时一切正常,但是一旦其中一个同步适配器需要在 acquire() 中等待,就会引发 InterruptedException:

10-29 19:08:38.777: W/System.err(419): java.lang.InterruptedException
10-29 19:08:38.787: W/System.err(419): at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1280)

有什么想法吗?

最佳答案

尝试使用 Semaphore.acquireUninterruptibly() 而不是 Semaphore.acquire()。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html#acquireUninterruptibly()

关于android - 协调两个同步适配器的信号量导致 InterruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com