081042实验四 多线程_实验十二多线程
081042实验四 多线程由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验十二多线程”。
广州中医药大学信息技术学院
课程名称:专业班级:学生学号:学生姓名:实验名称:实验成绩:课程类别:
验 报 告
Java程序设计
计算机科学与技术2008级
2008081042 王湛泽
JAVA程序设计
必修□限选 公选□ 其它□
实
实验四
多线程
[实验目的] 1.练习线程的使用以深入理解线程状态与生命周期。2.了解线程调度机制、理解线程同步机制。
[实验内容] 1.编写一个多线程的Java应用程序,经历线程不同的状态与生命周期。
2.编写一个多线程的Java应用程序,在程序中进行线程同步的处理。[实验步骤与要求] 第1题 线程的状态
编写一个Java应用程序,在主线程中再创建2个线程,要求线程经历4种状态:新建、运行、中断和死亡 第2题 排队买票
编写一个Java应用程序,模拟5个人排队买票。售票员只有1张五元的钱,电影票五元一张。假设5个人的名字及排队顺序:赵、钱、孙、李、周。“赵”拿一张二十元的人民币买2张票,“钱”拿1张二十元的人民币1张票,“孙”拿1张十元的人民币买1张票,“李”拿1张十元的人民币买2张票,“周”拿1张五元的人民币买1张票,要求售票员按如下规则找赎:
二十元买2张票,找零:找1张十元;不许找2张五元 二十元买1张票,找零:找1张十元,1张五元;不许找3张五元
十元买1张票,找零:找1张五元 [作业提交] 第一题:
将代码贴在下面:
public cla Example8_8{ public static void main(String args[]){ ClaRoom room=new ClaRoom();room.zhangHua.start();
room.teacher.start();} } cla ClaRoom implements Runnable{ Thread zhangHua,teacher;ClaRoom(){ teacher=new Thread(this);zhangHua=new Thread(this);zhangHua.setName(“张华”);
teacher.setName(“刘老师”);} public void run(){ Thread thread=Thread.currentThread();if(thread==zhangHua){ try{ System.out.println(thread.getName()+“休息10秒后再说问候”);Thread.sleep(10000);} catch(InterruptedException e){ System.out.println(thread.getName()+“被吵醒了”);} System.out.println(thread.getName()+“说:早上好!”);} else if(thread==teacher){ for(int i=1;i
zhangHua.interrupt();//吵醒zhangXiao } } } 将结果运行截屏贴在下面:
第二题: 代码:
public cla Example8_10{ public static void main(String args[]){ String s1=“张”,s2=“钱”,s3=“孙”,s4=“李”,s5=“周”;Cinema canema=new Cinema(s1,s2,s3,s4,s5);Thread zhang,qian,sun,li,zhou;zhang=new Thread(canema);qian=new Thread(canema);sun=new Thread(canema);li=new Thread(canema);zhou=new Thread(canema);zhang.setName(s1);qian.setName(s2);4 sun.setName(s3);li.setName(s4);zhou.setName(s5);zhang.start();qian.start();sun.start();li.start();zhou.start();} } cla Cinema implements Runnable{ //实现Runnable接口的类(电影院)TicketSeller seller;//电影院的售票员
String name1,name2,name3,name4,name5;//买票人的名字(线程的名字)Cinema(String s1,String s2,String s3,String s4,String s5){ seller=new TicketSeller();name1=s1;name2=s2;name3=s3;name4=s4;name5=s5;} public void run(){ if(Thread.currentThread().getName().equals(name1)){ seller.sellTicket(20);} else if(Thread.currentThread().getName().equals(name2)){ seller.sellTicket(20);} else if(Thread.currentThread().getName().equals(name3)){ seller.sellTicket(10);} else if(Thread.currentThread().getName().equals(name4)){ seller.sellTicket(10);} else if(Thread.currentThread().getName().equals(name5)){ seller.sellTicket(5);} } } cla TicketSeller{ //负责卖票的类
int fiveNumber=1,tenNumber=0,twentyNumber=0;5 public synchronized void sellTicket(int receiveMoney){ String s=Thread.currentThread().getName();if(receiveMoney==5){ fiveNumber=fiveNumber+1;System.out.println(s+“给售票员5元钱,售票员卖给”+s+“一张票,不必找赎”);} else if(receiveMoney==10&&s==“李”){
tenNumber=tenNumber+1;
System.out.println(s+“给售票员10元钱,售票员卖给”+s+“两张票,不必找赎”);
} else if(receiveMoney==10&&s==“孙”){
while(fiveNumber
while(fiveNumber
while(tenNumber
tenNumber=tenNumber-1;twentyNumber=twentyNumber+1;System.out.println(s+“给售票员20元钱,售票员卖给”+s+“两张票,找赎15元”);}
截屏:
(作业提交说明:实验完成后,将此文档和相关的程序源程序代码一并压缩后提交上来,文件名为自己的学号+实验四,如2008000001+实验四.RAR)