第一题,可能是一个同步线程执行完毕,另外一个现成获得锁,继续执行!
第二题,3不一定,要看拥有锁的对象是否执行完毕,释放出锁!
第三题,选D,getfYourNumber()也应该是synchronized,否则结果不确定。
以上见解仅供参考

解决方案 »

  1.   

    1.我觉得A是一个笔误,应该是Exiting from a ...
    就是从一个同步块退出2.wait()方法定义中就有说明,应该是竞争这个锁吧,而不是自动获得3.这个题目也太祟了,怎么获得计数值呀,yourNumber不是public的
    getYourNumber没有返回值!看到这种题就有点火.4.我觉得应该选2, 1.一次notify只能有一个在wait的被唤醒,3.明显错误 4.要自己同步5.断言一般用于调试吧6.x没有声明为public或者protected,所以只能在同一个包可以访问7.A是正确的,断言不应该有副作用,B.断言一般是布尔型.C没有这种说法D.不用捕捉8.这个我觉得应该是C,应该返回值就是对这个对象的引用,怎么可以回收呢?9.我觉得应该是C,F.其实没有对这两个对象的引用,但是a对象有对b的引用,所以应该
      回收a后b才可以回收吧10.这个是断言,只有为true的时候才抛出断言错误.
      

  2.   

    1.退出机锁区,因为退出机锁区,并不一定能使得线程停止。
    2.选第一个是因为要用wait()必须要给线程机锁,第三个答案不对,因为被notify的线程不一定获得它所等待的线程的机锁,还是要等到那个线程退出机锁区。
    3.选c,因为关键的计数部分只要被锁住,就能使得各个线程之间不冲突。
    4.选2),4)不对是因为发出wait()命令的对象会锁住其他调用该对象的对象而不是调用wait()发到的目的对象,原因:wait() causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. In other words, this method behaves exactly as if it simply performs the call wait(0). 
    The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution. 
    This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor. 
    5.选A,BCD是错的,因为Java的assertions特性用于一个特殊的目的:当用户定义的布尔表达式为False时它会抛出一个错误。更确切地说,一个assertion被当作一个发现某个值变成false的信号,它用来指示当前函数需要被中断。该性能被用在创建不该出现在真正产品部署过程中的专用调试模式上时非常有用。
    6.不是那个原因,是你的x没有定义,如果你是要用继承下来的x,那你在声明的时候必须声明成protected的,而不是默认的friend
    7.偶也不知道是什么意思
    8.B.oa[0]引用o,当o = null时oa[0] = null
    9.TestA test = new TestA();的原因
    10.是错误,不是异常。
    同样仅供参考
      

  3.   

    难道书上的就一定对,我是不明白existing from是什么意思,我不是说是你的笔误
      

  4.   

    下午去考了,走前就再来复习下,嘿嘿
    1.A,C,存活于同步块内的线程,释放于得到锁,不会影响其执行,同样notify方法是用来唤醒wait()中的线程2.synchronized只保证wait中的对象会获得一个锁来保证其值不会被改变,而notify则不保证3.他既然问了uses multiple Threads,所以我想这题应该用到synchroized,所以应该选C4.wait()会一直等到notify/notifyAll来唤醒。而选项1说notify后没有作用??5.Assertions 可以在类到类的基础上使用,前几天有过这样一个帖子,你可以找找.6.不在同一包内的两个类,不可以直接继承.但我试过,即使在同一包内的不同子包内的两个类,也无法正常import,不知为什么7.断言表达式不应该有执行效果,即assert ex1:ex2  这里的ex1的返回值是个boolean type,ex2不能是方法.当ex1 return false时,才会执行ex2!8.这题就是C,别被迷惑!我就被迷惑了好几天!!TESTKING里这题出现过3次,给的答案也不一样,FT!!遇到垃圾回收题,自己画个图就明白多了~~9.有类似的问题
    http://www-900.ibm.com/developerWorks/cn/java/l-JavaMemoryLeak/index.shtml
    http://community.csdn.net/Expert/topic/3488/3488589.xml?temp=.871853110.断言机制的默认状态是关闭的,除非开发者自己去command line下启用,否则不会影响到程序的正常编译及运行