sig
  type t = java'util'concurrent'Phaser java_instance
  val make : ?parent:Phaser.t -> ?parties:int32 -> unit -> Phaser.t
  val arrive : Phaser.t -> java_int
  val arrive_and_await_advance : Phaser.t -> java_int
  val arrive_and_deregister : Phaser.t -> java_int
  val await_advance : Phaser.t -> java_int -> java_int
  val await_advance_interruptibly : Phaser.t -> java_int -> java_int
  val await_advance_interruptibly_time :
    Phaser.t -> java_int -> java_long -> TimeUnit.t -> java_int
  val bulk_register : Phaser.t -> java_int -> java_int
  val force_termination : Phaser.t -> unit
  val get_arrived_parties : Phaser.t -> java_int
  val get_parent : Phaser.t -> Phaser.t
  val get_phase : Phaser.t -> java_int
  val get_registered_parties : Phaser.t -> java_int
  val get_root : Phaser.t -> Phaser.t
  val get_unarrived_parties : Phaser.t -> java_int
  val is_terminated : Phaser.t -> bool
  val register : Phaser.t -> java_int
  val null : Phaser.t
  external is_null : Phaser.t -> bool = "java is_null"
  external is_not_null : Phaser.t -> bool = "java is_not_null"
  val wrap : Phaser.t -> Phaser.t option
  val unwrap : Phaser.t option -> Phaser.t
end