首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
admin
2009-12-22
60
问题
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。
注意:不改变程序的结构,不得增行或删行。
class DataPool
{
private int data;
private boolean isFull;
public DataPool()
{
isFull=false;
}
public synchronized void putData(int d)
{
if(isFull= =true)
{
try
{
this.notify();
}
catch(InterruptedException e)
{}
}
data=d;
isFull=true;
System.out.println("生产了一个数据:"+data);
this.notify();
}
public synchronized int getData()
{
if(isFull= =false)
{
try
{
this.wait();
}
catch(InterruptedException e)
{}
}
isFull=false;
System.out.println("消费了一个数据"+data);
this.wait();
return this.data;
}
boolean getIsFull()
{
return isFull;
}
}
class Producer extends Thread
{
DataPool pool;
public Producer(DataPool pool)
{
this.pool=pool;
}
public void run()
{
for(int i=0; i<10; i++)
{
int data=(int) (Math.random()*1000);
try
{//用于生产数据
sleep(data);
}
catch(InterruptedException e)
{}
pool.putData(data);
}
}
}
class Consumer implements Runnable
{
DataPool pool;
public Consumer(DataPool pool)
{
this.pool=pool;
}
public void run()
{
for(int i=0; i<10; i++)
{
int data=pool.getData();
try
{//用于处理数据
sleep((int) (Math.random()*1000));
}
catch(InterruptedException e)
{}
}
}
}
public class advance
}
public static void main(String[] args)
{
Data Pool pool=new Data Pool();
Producer pro=new Producer(pool);
Runnable con=new Consumer(pool);
Thread conTh=new Thread(con);
pro.start();
conTh.start();
}
}
选项
答案
this.wait() this.notify() thread.sleep((int)(Math.random()*1000))
解析
本题考查知识点:多线程同步与互斥、线程的概念和实现方法。解题思路:Data Pool是一个用来存放数据的缓冲池,其中可以存放一个血型数据,变量isFull作为标志量,标志该缓冲池中是否有数据。Put Data()方法负责向Data Pool中存放数据,本方法调用成功,缓冲池中就存入了数据,getData()方法负责从DataPool中获得数据,本方法调用成功,缓冲池就为空。Producer类负责产生随机数据,然后将数据存放到DataPool中。Consumer类负责才能够从DataPool中取出数据。Producer和Consumer共享同一个Data Pool对象。当某个线程进入synchronized块后,共享的数据并不一定能满足该线程的需要,这样线程就需要等待其他线程修改共享数据,直到满足需要以后才继续执行,但是当前线程必须释放锁以使得其他线程可以运行。wait()和notify()方法是实现线程之间通信的两个方法。wait()用来释放线程拥有的锁,使线程进入等待队列;notify()用来唤醒等待队列中的线程,并把它加入到申请锁的队列。本题中生产者在DataPool有数据的情况下需要进入等待消费者取出数据,所以需要调用wait()方法,因此第1个下划线的地方应该改为this.wait()。消费者线程在取出数据以后,必须通知生产者线程DataPool中已经没有数据了,因此第2个下划线的地方改为this.notify()。第3个下划线的地方,考查常用的线程类的使用。Runnable接口的目的是使任何类都可以为线程提供线程体,但它本身并不是线程,所以并不能直接调用Thread类的方法,需要改为 thread.sleep。
转载请注明原文地址:https://kaotiyun.com/show/ccnp777K
本试题收录于:
二级Java题库NCRE全国计算机二级分类
0
二级Java
NCRE全国计算机二级
相关试题推荐
将表结构为(职工号,姓名,工资)的表Employee中所有职工的工资增加20%,正确的SQL命令是
插入一条记录到表结构为(职工号,姓名,工资)的表Employee中,正确的SQL命令是
有三个关系R、S和T如下:则由关系R和S得到关系T的操作是
页框控件也称作选项卡控件,在一个页框中可以有多个页面,页面个数的属性是
下列关于视图的说法中,不正确的叙述是()。
下列小题使用如下关系:客户(客户号,名称,联系人,邮政编码,电话号码)产品(产品号,名称,规格说明,单价)订购单(订单号,客户号,订购日期)订购单名细(订单号,序号,产品号,数量)假设客户表中有客户号(关键字)C1~C10共10条客户记录,订购
(1)在考生文件夹下有一个名为formone。SCX的表单文件,如下图所示,其中包含一个文本框、一个表格和两个命令按钮。请按下列要求完成相应的操作:①通过“属性”窗口将文本框Text1的Value属性值设置为当前系统日期(日期型,不含
定义无符号整数类为UInt,下面可以作为类UInt实例化值的是
下面代码中Dog这个类中的__init__()方法共包含几个形参?()ClassDog():def__init__(self,name,age):self.name=nameself.
Java的体系结构中,最下层是移植接口,上面一层是虚拟机,虚拟机的上层是【】和基本API,它们都具有可扩展性。
随机试题
副县长甲对妻子乙(幼儿园老师)说:“我不便收受别人东西,如有人给你送礼,只要对方所托之事我能搞定,你就收下。”丙送给乙3万元,请乙想办法解决孩子工作问题。乙收下钱后告知甲,甲安排丙的孩子去财政局上班。关于本案的分析,下列哪些选项是错误的?(
StatesExperimentwithOut-of-ClassroomLearning[A]AttheendofAugust,mostofOhio’steenagerswillshakeofftheirsum
以下疾病的发病机制与高血压无关的是
A及时供氧B洗胃、灌肠C服用鸡蛋清D饮服甘草、绿豆汤E停用一切药物,同时禁食对急性中毒出现循环衰竭者需
抗震设计时,单层钢筋混凝土柱厂房的柱间支撑设置,下列所述的哪一项是正确的?[2004年第132题]
对一个国家的劳动力供给数量产生影响的主要因素包括()。
主要会计政策、会计估计中披露:按《企业会计制度》的规定,本年度调整了坏账准备的计提方法,由应收款项余额百分比法改为账龄分析法属于会计估计变更,采用未来适用法进行会计处理。( )S公司拥有X有限公司80%表决权资本,故已按规定将该子公司纳入合并会计报表
下图所示山地为甲、乙两条河流的分水岭,由透水和不透水岩层相间构成。在生态文明建设过程中,该山地被破坏的森林植被得以恢复,随之河流径流量发生了变化,河流径流的年内波动也减缓了。据此完成下列问题。如果降水最终主要转化为河流径流,那么森林植被恢复后,甲、乙
最近一项问卷调查报告表明,在3500份问卷调查表中,有83%的老年人非常喜欢看“跑男”这个娱乐节目。由此调查小组得出结论:老年人对“跑男”这个节目不感兴趣的说法是不正确的。以下哪项如果为真,最能削弱上述结论?
税务机关对单价()以下的其他生活用品,不采取税收保全措施和强制执行措施。
最新回复
(
0
)