2013-08-25 2 views
0

Мне нужно использовать переменную условия в моем коде. Подняв API-интерфейс Android, я увидел, что в пакете android.os содержится ConditionVariable. Но я также нашел Condition под java.util.concurrent.locks.В чем разница между Condition или ConditionVariable?

Два класса, по-видимому, предназначены для той же цели.

Condition.await() <-> ConditionVariable.block() 
Condition.signal() <-> ConditionVariable.open() 

Есть ли разница, о которой я должен знать?

ответ

1

Как описано в документации вы связаны между собой, Condition может разбудить одинарные темы, вместо того, чтобы разбудить все ожидания те (signal против signalAll).

ConditionVariable это состояние на основе и, таким образом, позволяет сохранять состояние открытых (в отличие от освобождения всех потоков, ожидающих в одно время, можно не блокировать темы, вообще используя open и close).


Таким образом, вы должны использовать Condition если

  • вы должны быть совместимы с регулярной Java (например, в библиотеке, используемой для ПК/сервера/все приложения, тоже), так как ConditionVariable не доступный там.
  • вам нужно будить одиночные тема
  • (мое личное мнение) вы не нуждающийся в открытой фазе ConditionVariable, как единственный вызов signalAll приятнее читать, чем open непосредственно с последующим close.

в то время как вы должны использовать ConditionVariable если

  • у вас есть фазы в вашем приложении, где вам не нужны какие-либо блокировки на всех
0

Использование Android ConditionVariable, когда его по существу одноразового использования block().

Использование Java Condition, когда у вас есть цикл, который ждет на await()

Причина заключается в том, что нет поточно-безопасного пути для официанта к block(), а затем close() (без использования дополнительных механизмов синхронизации).

See examples of ConditionVariable here.

See examples of Condition here.

Смежные вопросы