1.
类Thread的一个实例有一个名为notify()的方法,该方法可以被调用
new Thread().notify() ;
没问题2.
一个到方法notify()的调用将唤醒当前拥有对象锁定的线程(不严谨)
notify唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程
不对
3.
 方法notify()是同步的
 public final void notify()
 不对 
4.
 方法notifyAll()在类Thread中被定义的
 Thread API
 Methods inherited from class java.lang.Object 
 clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait 
 不对
5.
 当有超过一个线程在等待获得一个对象的锁定时,那么就无法确定notify()方法将通知哪个线程
 没问题
 

解决方案 »

  1.   

    C和E
    A.notify是属于Object的。
    C.notify方法本身不是同步,但是只有同步获得了对象锁的实例能调用,否则会抛异常。
      

  2.   

    notify要在同步下调用,而唤醒当前锁定的线程当然是用notifyall综合比较应选AC。
      

  3.   

    notify()和notifyAll()都是在Object中定义的.
    AD不对public final void notify()唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。 
    直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。 此方法只应由作为此对象监视器的所有者的线程来调用。通过以下三种方法之一,线程可以成为此对象监视器的所有者: 通过执行此对象的同步 (Sychronized) 实例方法。 
    通过执行在此对象上进行同步的 synchronized 语句的正文。 
    对于 Class 类型的对象,可以通过执行该类的同步静态方法。 
    一次只能有一个线程拥有对象的监视器。是任意的.
    B noE是肯定正确的.C 5楼说的有理,但定义方法时本身就不是同步的,那是对还是错类。
    等待高手....
      

  4.   

    没想到有么这么多的答案。
    有一点,大家非常明确。 
    E是肯定对的。
    我反而认为E是错的
    notify对应于wait()
    而只有notifyAll,才不知道唤醒哪一个线程。
      

  5.   

    顶 AEA:
    notify确实是Object定义的,
    Thread也是Object(java所有非基本类型都是Object),
    自然也有该方法。E:
    to 楼上:
    对象在wait时会释放synchonrized的锁,
    被唤醒后会重新获取。
    notify() 是选择其中一个唤醒,其它仍然在wait。
    notifyAll() 是全部都唤醒,全部都尝试重获锁,
    当然只有其中一个会得到并继续执行,其它得不到锁的继续等待,
    但这时是等待锁,而不是等待notify。
      

  6.   

    对于A我非常反感
    你说一个线程本身会用到wait和notify这类方法吗?
      

  7.   

    A)类Thread的一个实例有一个名为notify()的方法,该方法可以被调用。 
    如果不挑刺的话,A确实没有问题。
    方法不就是用来被调用的么?被调用也没给主语,并没说被谁调用。
    就算是自己调用,语法上也是说的过去的吧?
      

  8.   

    15楼的思路有问题。
    线程对象的notify方法,没有规定必须由本身调用;而且如果有人做线程池之类的东西,还真可以直接使用Thread的notify方法。
      

  9.   

    一个到方法notify()的调用将唤醒当前拥有对象锁定的线程。 
    我觉得B是对的。
    notify()> wait()