sig
  type state =
      New
    | Runnable
    | Blocked
    | Waiting
    | Timed_waiting
    | Terminated
  val max_priority : java_int
  val min_priority : java_int
  val norm_priority : java_int
  type t = java'lang'Thread java_instance
  val make :
    ?group:ThreadGroup.t ->
    ?name:JavaString.t -> ('-> unit) -> '-> Thread.t
  val current_thread : unit -> Thread.t
  val get_id : Thread.t -> java_long
  val get_name : Thread.t -> JavaString.t
  val get_priority : Thread.t -> java_int
  val get_state : Thread.t -> Thread.state
  val get_thread_group : Thread.t -> ThreadGroup.t
  val interrupt : Thread.t -> unit
  val interrupted : unit -> bool
  val is_alive : Thread.t -> bool
  val is_daemon : Thread.t -> bool
  val is_interrupted : Thread.t -> bool
  val join : Thread.t -> unit
  val join_time : Thread.t -> java_long -> unit
  val join_time_nanos : Thread.t -> java_long -> java_int -> unit
  val set_daemon : Thread.t -> bool -> unit
  val set_name : Thread.t -> JavaString.t -> unit
  val set_priority : Thread.t -> java_int -> unit
  val sleep : java_long -> unit
  val sleep_nanos : java_long -> java_int -> unit
  val start : Thread.t -> unit
  val yield : unit -> unit
  val null : Thread.t
  external is_null : Thread.t -> bool = "java is_null"
  external is_not_null : Thread.t -> bool = "java is_not_null"
  val wrap : Thread.t -> Thread.t option
  val unwrap : Thread.t option -> Thread.t
end