有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何在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) 个答案