在多线程中并发写入文件

Concurrent write to a file in multithreading

我是并发编程新手,读过同步和锁。 我知道我们可以一次写一个。 但是我的要求是: 1. 不同键值并发写入 2. 仅在键级别锁定,即如果一个线程正在对 key1 执行写操作,则 key1 的另一个线程应该等待

对于此实施使用哪个选项有什么建议吗?

我在 vetx 框架中使用 KeyValueLib Class

您可以拥有多把锁,并为每把钥匙分别使用一把唯一的锁。例如:

public class MultipleKeyExample{
    private Object lock1=new Object();
    private Object lock2=new Object();
    private int x,y;// these could be your keys

    ......

    public void setX(int x){
        synchronized(lock1){
            this.x=x;
        }
    }

    public void setY(int y){
        synchronized(lock2){
            this.y=y;
        }
    }

    public int getX(){
        synchronized(lock1){
            return x;
        }
    }

    public int getY(){
        synchronized(lock2){
            return y;
        }
    }
}

尽管我个人更喜欢 Java 的并发实用程序中的锁。 您可以使用 ReentrantReadWriteLock。您可以将上面的代码更改为:

public class MultipleKeyExample{
    private ReadWriteLock lock1=new ReentrantReadWriteLock();
    private ReadWriteLock lock2=new ReentrantReadWriteLock();
    private int x,y;

    ......

    public void setX(int x){
        lock1.writeLock().lock();
        this.x=x;
        lock1.writeLock().unlock();
    }

    public void setY(int y){
        lock2.writeLock().lock();
        this.y=y;
        lock2.writeLock().unlock();
    }

    public int getX(){
        lock1.readLock().lock();
        return x;
        lock1.readLock().unlock();
    }

    public int getY(){
        lock2.readLock().lock();
        return y;
        lock2.readLock().unlock()
    }
}

编辑:

如果您不想预定义键的数量,您可以为每个键创建对象,并将它们存储在集合框架数据结构中。或者更简单地说,使用像 ConcurrentHashTable.

这样的并发数据结构

希望这对您有所帮助。