问题 单项选择题

使线程放弃当前分得的CPU时间,但不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得CPU时间的方法是( )。

A.sleep()方法

B.suspend()方法

C.yield()方法

D.wait()方法

答案

参考答案:C

解析: 本题考查对线程阻塞概念的理解程度。为了解决对共享存储区的访问冲突,Java引入了同步机制。但当多个线程对共享资源访问时,显然同步机制已经不够了,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止1个。为了解决这种情况下的访问控制问题,Java引入了对阻塞机制的支持。
阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪),学过操作系统的同学对它一定已经很熟悉了。Java提供了大量方法来支持阻塞,下面逐一分析。选项A错误,slccp()允许指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到CPU时间,指定的时间一过,线程重新进入可执行状态。典型地,slecp()被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。选项B错误,suspend()和resume()两个方法常配套使用,suspcnd()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume()被调用,才能使得线程重新进入可执行状态。典型地,suspend()和resume()被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用resume()使其恢复。
选项C正确,yield()使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得CPU时间。调用yield()的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
选项D错误,wait()和notify()两个方法常配套使用,wait()使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,前者当对应的notify()被调用或者超出指定。

实验题
单项选择题

大家都知道,计算机的记忆能力是十分晾人的,即使是关掉电源以后,该记住的也不会忘记。这是芯片的功劳。但是,有了瓦伦的发明,电子配件也可以有计算机芯片般良好的记忆能力了。当然,现在的蜂窝式移动电话和数码摄像机等电器中已经配有非易去性芯片,但是,制造成本非常昂贵,同常规芯片相比,速度也很慢。瓦伦的芯片制造成本和平常芯片的一样低廉,速度也同样快。1998年4月,第一批新型芯片正式问世。同计算机芯片相比,电子设备上的芯片显得大多了,所以瓦伦戏称他的发明为“大象芯片”——他的发明和得奖完全是“意外之财”:他们做实验时一时疏忽,把电路上的一个晶体管烧得过热。出于好奇,他们给这个晶体管通了电,关掉电源后,晶体管内还带电。以前从未注意到硅片做的晶体管还有这个特性,即使是注意到了,肯定也只是觉得好玩而已。几周以后,在某次电子会议休会时,瓦伦提到了他实验室里好玩的事,有位同行脱口指出,那很可能会解决非易失性记忆问题!瓦伦才真意识到,好玩的东西有好大的市场潜力。

下列表述不符合文意的一项是()。

A.“常规芯片”与“平常芯片”的含义不尽相同

B.文中的“新型芯片”“电子设备上的芯片”与“大象芯片”是指同一事物

C.新型芯片的成本与速度是瓦伦发明的意义之所在

D.“成功孕于偶然,创造会在不经意中光顾,”计算机芯片的发明就是这样