Java中线程相关的基本方法

线程相关的基本方法有:wait、notify、notifyAll、sleep、join、yield等

①、线程等待(wait)

  • 调用该方法的线程会进入WAITING状态,只有等待另外线程的通知或者被中断才会返回,需要注意的是调用wait()方法后,会释放对象的锁
  • 因此,wait方法一般用在同步方法或同步代码块中

②、线程睡眠(Sleep)

  • sleep导致当前线程休眠,与wait方法不同的是sleep不会释放当前占有的锁
  • sleep(long ..)会导致线程进入TIMED_WAITING状态

③、线程让步(yield)

  • yield方法会使当前线程让出CPU执行时间片,与其他线程一起重新竞争CPU时间片。
  • 一般情况下,优先级高的线程有更大的可能性成功竞争得到CPU时间片,但这又不是绝对的,又的操作系统对线程优先级并不敏感

④、线程中断(Interrupt)

  • 中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位
  • 这个线程本身并不会因此而改变状态(如阻塞,终止等)

⑤、等待其他线程终止(Join)

  • join()方法,等待其他线程终止,在当前线程中调用一个线程的join()方法,则当前线程转为阻塞状态,直到另一个线程结束,当前线程再由阻塞状态变为继续状态,等待CPU的调用

⑥、线程唤醒(notify)

  • Object类中的notify方法,唤醒在此对象监视器上等待的单个线程;如果所有线程都在此对象上等待,则会选择唤醒其中的一个线程,选择是任意的。
  • 并在对实现做出决定时发生,线程通过调用其中一个wait()方法,在对象的监视器上等待,直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程
  • 被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争。
  • 类似的方法还有notifyAll()唤醒在此监视器上等待的所有线程