Я изучаю Mutex и семафор в Java. Поэтому я подумал о том, чтобы испачкать руки.
Я понимаю, что мьютекс - это семафор с единственным разрешением из этой ссылки , и мьютекс имеет концепцию владения из этой ссылки .
Чтобы продемонстрировать право владения, я написал программу ниже и нашел вывод ниже.
Когда я выпускаю больше, чем приобретаю, это фактически увеличивает количество разрешений.
Ниже приведена программа.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.Semaphore;
public class MutexOwnerShipDemo {
public static void main(String[] args) {
Semaphore mutex = new Semaphore(1);
final ExecutorService es = Executors.newSingleThreadExecutor();
try {
// acquire mutex lock permit in main thread
mutex.acquire();
// release the lock in different thread
Future mutexWait = es.submit(() -> mutex.release());
mutexWait.get();
System.out.println("mutexWait.isDone() " + mutexWait.isDone() );
System.out.println("successfully released permits for mutex \n " +
"available permits are " + mutex.availablePermits());
// release the lock in main thread
mutex.release();
System.out.println( "available permits are " + mutex.availablePermits());
// release lock in main thread once again
mutex.release();
System.out.println( "available permits are " + mutex.availablePermits());
} catch (Exception e) {
}
Runtime.getRuntime().addShutdownHook(new Thread(() -> es.shutdownNow()));
System.out.println(es.isShutdown());
}
}
Вывод -
mutexWait.isDone() true
successfully released permits for mutex
available permits are 1
available permits are 2
available permits are 3
false
Ожидается ли такое поведение? Если да, то как это работает
Мои подробности установки Java -
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)