首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
admin
2009-12-22
44
问题
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入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全国计算机二级
相关试题推荐
下列表单的哪个属性设置为真时,表单运行时将自动居中
下列选项中属于面向对象设计方法主要特征的足
在VisualFoxPro中,用于建立或修改程序文件的命令是
“教师表”中有“职工号”、“姓名”、“工龄”和“系号”等字段,“学院表”中有“系名”和“系号”等字段,计算“计算机”系教师总数的命令是
有如下赋值语句:a=’’计算机’’,b=’’微型’’,结果为’’微型机’’的表达式是
下面命令的输出结果是:DECLAREa(10)?a(O)
在考生文件夹下完成下列操作:(1)新建一个名为“职工管理”的数据库文件,将自由表“部门”、“职工”添加到该数据库中。(2)将“部门”中的“部门号”定义为主索引,索引名是indexdepa。(3)建立一个查询mysql,查询“
下列关于类、对象、属性和方法的描述中错误的是()。
假设新建了一个程序文件myProc.prg(不存在同名的.exe、.app和.fxp文件),然后在命令窗口输入命令DOmyProc,执行该程序并获得正常的结果。现在用命令ERASEmyProc.prg删除该程序文件,然后再次执行命令DOmyPro
在软件开发中,需求分析阶段产生的主要文档是()。
随机试题
此证应选用()若病情进一步发展,症见胁肋隐痛,遇劳加重,心烦头晕,睡眠欠佳,舌红苔薄,少津,脉弦细。治宜加用()
下列关于软胶囊剂的叙述,正确的是
商业银行经营管理过程中,资本作为风险的第一承受者,发挥了至关重要的作用。积极地推动了商业银行实现规模最大化的战略目标。()
我国是桂花的故乡,西南、中南地区是它的原产地,现在各地都有种植。在战国时代,屈原的《九歌》中就曾多次出现“桂舟”、“桂酒”等词,这是最早以桂入诗的例子。陕西省勉县城南定军山武侯墓前有两株桂花,相传栽种于汉代,已有1700多年历史,人们称它们为“汉桂”。
伦敦某研究团队使用结构性磁共振成像技术,对18名16岁至21岁的吸烟青少年和此年龄段24名不吸烟的青少年的大脑进行了检测。结果发现,吸烟者的右脑岛比非吸烟者右脑岛体积要小,脑岛周围被大脑皮层包裹,与大脑的记忆、意识和语言功能区彼此相连。研究者认为,吸烟改变
A.宽面综合征B.短面综合征C.长面综合征D.颅面骨发育不全综合征E.下颌面部发育不全综合征上颌垂直向发育过度伴下颌发育不足的是()。
()是将既有的形态:点、线、面在两度空间的平面内,按照一定的秩序和法则进行分解、组合,从而构成理想的形态和有意味的形式。
以下是一个竞赛评分程序。其功能是去掉8位评委中的一个最高分和一个最低分,计算平均分。DimmaxAsInteger,minAsIntegerDimIAsInteger.xAsInteger,SAsIntegermax=0:mi
请在【答题】菜单下选择【进入考生文件夹】命令,并按照题目要求完成下面的操作。注意:以下的文件必须都保存在考生文件夹下。期末考试结束了,初三(14)班的班主任助理王老师需要对本班学生的各科考试成绩进行统计分析,并为每个学生制作一份成绩通知
Beforethesummerof2000,the54yearoldJohnHaughomcouldaccomplishjustaboutanythingatwork."Icouldmovemountainsi
最新回复
(
0
)