123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package sys.thread;
- import java.util.concurrent.locks.ReentrantLock;
- import java.util.concurrent.locks.Condition as NativeCondition;
- @:access(sys.thread.Mutex)
- @:coreApi
- @:native('haxe.java.vm.Condition')
- class Condition {
- final lock:ReentrantLock;
- final native:NativeCondition;
- public function new():Void {
- this.lock = new ReentrantLock();
- this.native = lock.newCondition();
- }
- public function acquire():Void {
- lock.lock();
- }
- public function tryAcquire():Bool {
- return this.lock.tryLock();
- }
- public function release():Void {
- lock.unlock();
- }
- // without the @:native, you get "java.lang.VerifyError: class sys.thread.Condition overrides final method java.lang.Object.wait()V" on jvm
- // and "wait() in Condition cannot override wait() in Object" from javac
- @:native("waitOn")
- public function wait():Void {
- native.await();
- }
- public function signal():Void {
- native.signal();
- }
- public function broadcast():Void {
- native.signalAll();
- }
- }
|