首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入DataPool类中,消费者从中取出数据。DataPool类一次只能存放一个数据。请更正题中带下划线的部分。 注意:不改变程序的结构,不得增行或删行。 class DataPo
admin
2009-12-22
46
问题
本题程序中实现了一个“生产者一消费者问题”。生产者产生一个随机数存入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://jikaoti.com/ti/QQb0FFFM
本试题收录于:
二级Java题库NCRE全国计算机二级分类
0
二级Java
NCRE全国计算机二级
相关试题推荐
下列程序段执行以后,内存变量y的值是x=76543y=0DOWHILEx>0v=x%10+y*10x=int(x/10)ENDDO
在VisualFoxPro中,下面描述正确的是
假设查询文件(myquery.qpr)已经创建,要显示查询结果,可使用命令
数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的
对考生文件夹下的数据库“图书借阅”中的表完成如下操作:①为表loans增加一个字段“姓名”,字段类型为“字符型”,宽度为8。编写程序modipro.prg实现以下功能:②根据borrows表的内容填写表loans中“姓名”的字段值。③查询表loan
以下是与设置系统菜单有关的命令,错误的是()。
下面关于创建报表的方法中,错误的是()。
检查软件产品是否符合需求定义的过程称为()。
在软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看作是()。
Applet是能够嵌入到【】页面中,并能够在浏览器中运行的Java类。
随机试题
阅读关于“区域发展差异”的图文资料,按要求完成教学设计任务。材料一《普通高中地理课程标准(实验)》中的相关内容标准:“以两个不同区域为例,比较自然环境、人类活动的区域差异。”材料二某版本教科书中关于“区域发展差异”的部分内容。
Jeandidnothavetimetogototheconcertlastnightbecauseshewasbusy______forherhistoryexamination.
关于高原性肺水肿说法正确的有
尿毒症患者最常见的感染是
完带汤的组成药物中含有()越鞠丸的组成药物中含有()
根据公路工程施工企业资质等级划分规定,以下错误的资质等级是()。
某轿车生产企业为增值税一般纳税人,2013年10月生产经营情况如下:(1)汽车修配厂提供汽车修理服务,开具的普通发票上注明营业额46.8万元;提供汽车租赁业务,取得租金收入14万元。(2)以自然资源使用权对另一企业投资,承担投资风险,当年分得投资利润8
荀子在论述教学时指出“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之,学至于行而止”。四位教师结合自身教育教学实践,对荀子这段话做了如下理解,不正确的是()。
以下对社区工作者的职业道德要求表述正确的有()。
计算∫arctanexdx.
最新回复
(
0
)