java, mutex
спецы, оцените правильность
public class Locker {
static private Object mutex;
static private boolean used;
static void lock {
synchronized(mutex) {
while( used ) {
try {
mutex.wait;
}
catch( Exception ex) {
// ggg
}
}
used = true;
}
}
static void unlock {
synchronized(mutex) {
used = false;
mutex.notifyAll;
}
}
static {
mutex = new Object;
used = false;
}
}
вот только unlock хотелось бы в деструктор... а их нема (это если не static-ом делать lock
Так вроде ничо. Зачем только вот эта конструкция: while (used) ...
ну а вдруг exception будет
А так эта конструкция в купе с нотифай олл реализует обычный нотивай (который без олл).
Так что я думаю, что было бы лучше просто использовать синхронизацию по какому-нибудь объекту.
Класс типа этого имеет смысл писать для того чтобы поиметь метод типа tryLock который не блокируется, такого обычные джавовские мониторы не позволяют. А все остальное на мой взгляд будет выглядедть очевиднее без вспомогоательных классов.
но всё же у меня были и есть причины оформит локер в виде отдельного класса:
1. по нему синхронизируются треды из разных классов (это очевидно )
2. сейчас я переделываю это дело из простого локера в локер на чтение запись, для этого оформление в виде отдельного класса горазде проще
java.util.concurrent.locks.Lock
java.util.concurrent.locks.ReadWriteLock
там, конечно же, куча других всяких локов, да и весь пакет concurrents интересен.
спасибо!
Оставить комментарий
myrka68
в яве мутексы есть?чё-то я не догоняю, как при помощи synchronized можно полноценно работать