2
0

Condition.hx 977 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package sys.thread;
  2. import java.util.concurrent.locks.ReentrantLock;
  3. import java.util.concurrent.locks.Condition as NativeCondition;
  4. @:access(sys.thread.Mutex)
  5. @:coreApi
  6. @:native('haxe.java.vm.Condition')
  7. class Condition {
  8. final lock:ReentrantLock;
  9. final native:NativeCondition;
  10. public function new():Void {
  11. this.lock = new ReentrantLock();
  12. this.native = lock.newCondition();
  13. }
  14. public function acquire():Void {
  15. lock.lock();
  16. }
  17. public function tryAcquire():Bool {
  18. return this.lock.tryLock();
  19. }
  20. public function release():Void {
  21. lock.unlock();
  22. }
  23. // without the @:native, you get "java.lang.VerifyError: class sys.thread.Condition overrides final method java.lang.Object.wait()V" on jvm
  24. // and "wait() in Condition cannot override wait() in Object" from javac
  25. @:native("waitOn")
  26. public function wait():Void {
  27. native.await();
  28. }
  29. public function signal():Void {
  30. native.signal();
  31. }
  32. public function broadcast():Void {
  33. native.signalAll();
  34. }
  35. }