多线程&并发篇---第三篇

系列文章目录


文章目录

  • 系列文章目录
  • 一、为什么wait, notify 和 notifyAll这些方法不在thread类里面?
  • 二、为什么wait和notify方法要在同步块中调用?
  • 三、Java中interrupted 和 isInterruptedd方法的区别?


一、为什么wait, notify 和 notifyAll这些方法不在thread类里面?

明显的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线
程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类中,线
程正在等待的是哪个锁就不明显了。简单的说,由于wait,notify和notifyAll都是锁级别的操作,所
以把他们定义在Object类中因为锁属于对象

二、为什么wait和notify方法要在同步块中调用?

  1. 只有在调用线程拥有某个对象的独占锁时,才能够调用该对象的wait(),notify()和notifyAll()方
    法。
  2. 如果你不这么做,你的代码会抛出IllegalMonitorStateExcep

你可能感兴趣的:(多线程)