Смешайте энергозависимый и синхронизированный как блокировку чтения-записи

Рассмотрим переменную примитивного типа с большим количеством потоков чтения и несколькими потоками записи, будет ли следующий код работать правильно?

Если да, обеспечивает ли он лучшую производительность, чем 1). объявление синхронизированным для всех методов; 2). с использованием явного ReadWriteLock?

Это обычный шаблон? Если нет, то какой шаблон обычно используется в этой ситуации?

В настоящее время это работает для меня, но я считаю, что использовать как энергозависимую, так и синхронизированную информацию немного избыточно.

private volatile int value = 1;

public void func1()
{
    if (value == 1) {
        // do something
    }
}

public void func2()
{
    if (value == 2) {
        // do something
    }
}

public void func3()
{
    if (value == 3) {
        // do something
    }
}

public synchronized void increase()
{
    if (value < 10) value++;
}

public synchronized void decrease()
{
    if (value > 0) value--;
}
7
задан Hongbo 27 November 2010 в 03:09
поделиться