安卓如何在Java中正确使用二进制信号量?
请帮助我,因为我在我的应用程序中面临着罕见的比赛条件
两个线程将连续并行运行,两个线程将在任意时间从远程位置获取相同类型的数据
首先从远程获取数据的线程将处理并在数据库中保存该数据的记录
示例:当线程A运行时,如果线程B获得相同的数据,它必须等待线程A完成,并检查数据库中是否存在记录(由线程A创建)。如果没有记录,那么线程B可以处理并保持
目标:不要为数据库中的同类数据创建重复记录
所以我使用了信号量类。
/** treat RLock as a singleton class.*/
public class RLock {
private static RLock instance;
Semaphore locker = new Semaphore(1);
public static synchronized RLock getRLock() {
if (instance == null) {
instance = new RLock();
}
return instance;
}
private RLock() {
}
public void lock(){
...
locker.acquire();
...
}
public void release(){
...
locker.release();
...
}
}
class T1 implements Runnable {
@Override
public void run() {
while (true) {
RLock.getRLock().lock();
// parsing remote data and persisting in db
RLock.getRLock().release();
}
}
}
class T2 implements Runnable {
@Override
public void run() {
while (true) {
RLock.getRLock().lock();
// parsing remote data and persisting in db
RLock.getRLock().release();
}
}
}
有时两者都在获取锁(不起作用)并创建副本。 我不确定我是否正确使用了信号量。但这是我的要求。 谁能帮帮我吗
共 (0) 个答案