扫一扫关注官方微信
请登录
注册
快捷导航
热搜:
在线作业
天大
南开
大作业
大工 22年
手机版
首页
无忧答案网
在线作业
离线作业
复习资料
免费答案
帮助中心
Help
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
注册
当前位置:
首页
›
作业答案资讯
›
复习资料
›
吉大《java程序设计》复习资料(五)
刚刚去过
发布帖子
吉大《java程序设计》复习资料(五)
[复制链接]
100分
100分
当前离线
发消息
查看详细资料
积分
486
发表于
2021-3-18 11:31:08
|
显示全部楼层
|
阅读模式
底部有附件的就是帖子内容答案,需要可以下载
吉大《JAVA程序设计》拓展资源(五)
第五章 多线程
下面的Java的应用程序中,生产者线程向文件中写数据,消费者从文件中读数据,这样,在这个程序中同时运行的两个线程共享同一个文件资源。通过这个例子我们来了解怎样使它们同步。
class SyncStack //同步堆栈类
{ private int index = 0; //堆栈指针初始值为0
private char [] buffer = new char[6]; //堆栈有6个字符的空间
public synchronized void push(char c) //加上互斥锁
{ while( index == buffer.length ) //堆栈已满,不能压栈
{ try{ this.wait(); //等待,直到有数据出栈}catch(InterruptedException e){} }
this.notify(); //通知其它线程把数据出栈
buffer[index] = c; //数据入栈 index++; //指针向上移动
}
public synchronized char pop() //加上互斥锁
{ while(index ==0) //堆栈无数据,不能出栈
{ try{ this.wait(); //等待其它线程把数据入栈 }
catch(InterruptedException e){ } }
this.notify(); //通知其它线程入栈
index- -; //指针向下移动
return buffer[index]; //数据出栈 }
}
class Producer implements Runnable //生产者类
{ SyncStack theStack; //生产者类生成的字母都保存到同步堆栈中
public Producer(SyncStack s) { theStack = s; }
public void run()
{ char c;
for(int i=0; i<20; i++)
{ c =(char)(Math.random()*26+‘A’); //随机产生20个字符
theStack.push(c); //把字符入栈
System.out.println(“Produced: ”+c); //打印字符
try
{ Thread.sleep((int)(Math.random()*1000));/*每产生一个字符线程就睡眠*/}
catch(InterruptedException e){ }
}
}
}
class Consumer implements Runnable //消费者类
{ SyncStack theStack; //消费者类获得的字符都来自同步堆栈
public Consumer(SyncStack s) { theStack = s; }
public void run()
{ char c;
for(int i=0;i<20;i++)
{ c = theStack.pop(); //从堆栈中读取字符
System.out.println(“Consumed: ”+c); //打印字符
try { Thread.sleep((int)(Math.random()*1000)); }
catch(InterruptedException e){ }
} }
}
public class SyncTest
{ public static void main(String args[])
{ SyncStack stack = new SyncStack();
//下面的消费者类对象和生产者类对象所操作的是同一个同步堆栈对象
Runnable source = new Producer(stack);
Runnable sink = new Consumer(stack);
Thread t1 = new Thread(source); //线程实例化
Thread t2 = new Thread(sink); //线程实例化
t1.start(); //线程启动 t2.start(); //线程启动
}
}
类Producer是生产者模型,其中的 run()方法中定义了生产者线程所做的操作,循环调用push()方法,将生产的20个字母送入堆栈中,每次执行完push操作后,调用sleep()方法睡眠一段随机时间,以给其他线程执行的机会。类Consumer是消费者模型,循环调用pop()方法,从堆栈中取出一个数据,一共取20次,每次执行完pop操作后,调用sleep()方法睡眠一段随机时间,以给其他线程执行的机会。
程序执行结果
Produced:V
Consumed:V
Produced:E
Consumed:E
Produced
Produced
...
Consumed
Consumed
奥鹏作业答案
可以联系QQ 761296021
吉大
,
java程序设计
,
程序设计
,
复习资料
相关帖子
西南大学2023年6月[0039]C语言程序设计大作业
北理工23春市场营销学复习资料
北理工23春车辆技术评估与检测复习资料
大学英语(下)23春北理工复习资料
北语网院23年1月《Python程序设计》作业_4_100分
北语网院23年1月《Python程序设计》作业_3_100分
北语网院23年1月《Python程序设计》作业_2_100分
北语网院23年1月《Python程序设计》作业_1_100分
北语网院23年1月《Oracle数据库开发》作业_1_100分
北语网院22年11月《Python程序设计》作业_1
奥鹏在线作业/离线作业辅导qq 1647861640
回复
举报
刚刚去过
无忧答案网
Copyright © 2024-2026
无忧在线题库
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by
5u.studio
X3.5 技术支持:
无忧答案
冀ICP备18010495号-1
快速回复
返回顶部
返回列表