1.分类描述

  • 1.sleep() 休眠
  • 2.suspend() 暂停和 resume() 继续
  • 3.yield() 让步

就是我放弃本次执行,但继续排队,下一次有机会在执行。

  • 4.wait() 和 notify() notifyAll()

注:这两个方法,属于Object类,而不属于Thread类,wait()会先释放锁住的对象,然后再执行等待的动作。由于wait()所等待的对象必须先锁住,因此,它只能用在同步化程序段或者同步化方法内,否则,会抛出异常IllegalMonitorStateException.

两个方法搭配使用,wait()使线程进入阻塞状态,调用notify()时,线程进入可执行状态。wait()内可加或不加参数,加参数时是以毫秒为单位,当到了指定时间或调用notify()方法时,进入可执行状态。

  • 5.join()

也叫线程加入。是当前线程A调用另一个线程B的join()方法,当前线程转A入阻塞状态,直到线程B运行结束,线程A才由阻塞状态转为可执行状态。

这种方法的使用场景:比如我目前的处理无法继续了,需要另一个状态或者数据的支持,那么可以将支持的监听放到另一个线程中,满足条件,主线程继续,子线程结束。

2.规律总结:

线程就好比排队,你有排队和放弃排队的权力,但你没有立即执行的权力。

suspend和resume是最本质的线程控制方法,其他的方法都是依据这两个方法定制起来的。

  • 1.sleep(5000) 我现在suspend,5000后执行resume;
  • 2.yield()让步,我正办理登机呢,刚拍完照,发现忘记带一个东西了,这时候我让步,但是我取完东西后,会进行下一次排队。
  • 3.join 这里就叫”接合“吧,我把我的线程suspend,开启另一个线程,他执行完的时候,我在resume;
04-15 14:49