Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > ReentrantReadWriteLock присвоении ссылки


Автор: icedog 12.5.2011, 19:09
что-то я совсем свихнулся копаясь в чюжом г....коде
есть примерно вот такой код (лишнее выкинул)

Код

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class Storage {
    private static final ReentrantReadWriteLock _readWriteLock = new ReentrantReadWriteLock();
    private static final Lock _read  = _readWriteLock.readLock();
    private static final Lock _write = _readWriteLock.writeLock();
    private static Object _data;
    
    public static Object get() {
        _read.lock();
        try {
            return _data;
        } finally {
            _read.unlock();
        }
    }
    
    public static void set(Object obj) {
        _write.lock();
        try {
            _data = obj;
        } finally {
            _write.unlock();
        }
    }
}


исходя из описания жавы присвоения ссылочных типов есть операция атомарная - в таком случае не проще и правильнее было бы сделать так:

Код


public class Storage {
    private static volatile Object _data;
    
    public static Object get() {
        return _data;
    }
    
    public static void set(Object obj) {
        _data = obj;
    }
}


какие еще причины могли заставить его все это сделать через ReentrantReadWriteLock ? или я просто затупил не по детский ...
 

Автор: MisterCleric 13.5.2011, 10:07
Привет. 
Это необходимо в многопоточной среде.
http://www.google.com/search?q=java+concurrency

Автор: LSD 13.5.2011, 11:39
Если между lock() и unlock() нет никакого кода, то это действительно не нужно. В такой ситуации, более логичным было бы использовать volatile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)