首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
admin
2009-12-22
71
问题
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入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全国计算机二级
相关试题推荐
在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是
下列是与设置系统菜单有关的命令,其中错误的是
在考生文件夹下完成下列操作:(1)新建一个名为“职工管理”的数据库文件,将自由表“部门”“职工”添加到该数据库中。(2)将“部门”中的“部门号”定义为主索引,索引名是“部门号”。(3)建立一个视图myview,视图中的数据是部
下列方法中,属于白盒法设计测试用例的方法的是()。
在考生文件夹下有一个名为zonghe的表单文件,其中:单击“添加>”命令按钮可以将左边列表框中被选中的项添加到右边的列表框中;单击“<移去”命令按钮可以将右边列表框中被选中的项移去(删除)。请完善“确定”命令按钮的Click事件代码,其功能是:查
在表单设计中,经常会用到一些特定的关键字、属性和事件,下列各项中属于属性的是()。
在软件开发中,需求分析阶段产生的主要文档是()。
下面代码中Dog这个类中的__init__()方法共包含几个形参?()ClassDog():def__init__(self,name,age):self.name=nameself.
下列数组a中,版本较新的能在程序运行时动态调整大小的是
随机试题
患儿,5个月。患急性支气管肺炎。1周来高热持续不退,咳嗽加重,呼吸困难伴口唇青紫。左侧肋间隙饱满,呼吸运动减弱,叩诊呈浊音,听诊呼吸音减弱。该患儿可能并发了
在细水雾灭火系统的管网水压试验中,要求试验压力为系统工作压力的()倍。
()不能够引起短期总需求曲线向右移动。
根据合伙企业法律制度的规定,下列有关合伙企业的解散和清算的说法中,不正确的是()。
2014年2月,某企业发生自用房地产应交房产税2000元,应交增值税10000元、车船使用税3000元、城镇土地使用税1500元、消费税16000元,支付印花税800元。不考虑其他因素,该企业当月应计入税金及附加的税金为()元。
改革开放以来,中国净进口粮食总量并未减少,但其占国内粮食生产的比重却呈减少趋势,1978—1984年占2%,1985—1990年占2%,1991—1995年占0.4%。另外,中国在进口一些粮食的同时,还出口一些具有较高附加值的食品。以下哪项,从上述题干中推
某市卷烟厂为增值税一般纳税人,主要生产A牌卷烟,该品牌卷烟不含税调拨价每标准条60元,最高不含税售价每标准条65元。2010年10月发生如下几笔业务:(1)从烟农手中收购一批烟叶,货物已验收入库,收购价格80000元,支付运费4000元,装卸费500元;
SNMPv2增加了一个非原子的Get命令,可以做到(63),SNMPv2增加的Inform命令使得网络管理的结构可以是(64)。SNMPv1的报文中除版本号和SNMPPDU外,还包括(65),在SNMPv2中,在原PDU的基础上增加了(66)信息。RMO
Shesoonfoundthatinthatplaceshewasjustlikeasquare______inaroundhole.
DowningStreetisthemostexclusivestreetinBritain,notbecauseitonlyhasthreehousesalongitsshort【B1】______,norpart
最新回复
(
0
)