首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
admin
2009-12-22
66
问题
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入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表增加一个字段“出生日期”,正确的SQL语句是
用DIMENSION命令定义数组后,数组各元素的值是
语句LISTMEMORYLIKEa*能够显示的变量不包括
如果内存变量和字段变量均有变量名“姓名",那么引用内存变量的正确方法是
有三个关系R、S和T如下:1则由关系R和S得到关系T的操作是
在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是
利用类设计器创建的类总是保存在类库文件中,类库文件的默认扩展名是
假定一个表单里有一个文本框Text1和一个命令按钮组CommandGroup1。命令按钮组是一个容器对象,其中包含Command1和Command2两个命令按钮。如果要在Command1命令按钮的某个方法中访问文本框的Value属性值,正确的表达式是
检查软件产品是否符合需求定义的过程称为()。
当浏览器重新返回Applet所在页面时,将调用Apptet类的方法是()。
随机试题
患者,女性,26岁。近5年反复出现剧烈活动后心悸、胸痛,多次晕厥,数分钟后意识恢复。体检发现胸骨左缘第3~4肋间闻及喷射性收缩期杂音,取站立位时杂音增强,下蹲时杂音减弱。对该疾病最有诊断价值的检查是
毒性剧烈,治疗剂量与中毒剂量相近,使用不当会致人中毒或死亡的药品是控制并消除滥用阿片类药物成瘾者的急剧戒断症状与体征的药品是
国有建设用地使用权出让为有偿行为是相对于()国有建设用地使用权而言的。
下列属于第一类危险源的有()。
下列关于金融期权的说法,正确的有()。Ⅰ.金融期权交易是指以金融期货合约为对象进行的流通转让活动Ⅱ.看涨期权赋予期权购买者有买入的权利Ⅲ.金融期权合约是由交易双方订立的、以金融期权为标的物的标准化合约Ⅳ.金融期权合约的买入者需支
2017年年末,甲公司应收账款账面余额为800万元,当年计提坏账准备100万元,坏账准备期初余额为0。假定税法规定,已提坏账准备在实际发生损失前不得税前扣除。2017年年末有关所得税会计处理表述中,不正确的是()。
2013年9月,中国证监会在对甲上市公司(以下简称“甲公司”)进行例行检查中,发现甲公司存在以下事实:(1)2013年1月,甲公司拟与乙公司进行400万元的交易。经查,乙公司持有甲公司6%的股份,该交易未经独立董事认可,即提交了甲公司董事会进行讨论
新中国对资本主义工商业的改造从中华人民共和国建立到1956年,经过赎买和国家资本主义的各种形式,把资本主义工商业逐步改造成为社会主义国营经济,使资本主义私有制转变为社会主义全民所有制的过程。中国在对资本主义工商业实行社会主义改造的过程中,在利润分配上采取的
Publicimage【C1】______tohowacompanyisviewedbyitscustomers,suppliers,andstock-holders,bythefinancialcommunity,by
Therocketengine,withitssteadyroarlikethatofawaterfallorathunderstorm,isanimpressivesymbolofthenewspaceage
最新回复
(
0
)