第一篇:2008081042实验四 多线程
广州中医药大学信息技术学院
课程名称:专业班级:学生学号:学生姓名:实验名称:实验成绩:课程类别:
验 报 告
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 class Example8_8{ public static void main(String args[]){ ClassRoom room=new ClassRoom();room.zhangHua.start();
room.teacher.start();} } class ClassRoom implements Runnable{ Thread zhangHua,teacher;ClassRoom(){ 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<=2;i++){ System.out.println(thread.getName()+“说:t上课!”);try{ Thread.sleep(500);} 3 catch(InterruptedException e){} }
zhangHua.interrupt();//吵醒zhangXiao } } } 将结果运行截屏贴在下面:
第二题: 代码:
public class 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();} } class 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);} } } class 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<1){ try{ System.out.println(s+“给售票员10元钱”);System.out.println(“售票员请”+s+“靠边等一会”);wait();//如果线程占有CPU期间执行了wait(),就进入中断状态 System.out.println(s+“结束等待,继续买票”);} catch(InterruptedException e){} } fiveNumber=fiveNumber-1;tenNumber=tenNumber+1;System.out.println(s+“给售票员10元钱,售票员卖给”+s+“一张票,找赎5元”);} else if(receiveMoney==20&&s==“钱”){
while(fiveNumber<1||tenNumber<1){ try{ System.out.println(s+“给售票员20元钱”);System.out.println(“售票员请”+s+“靠边等一会”);wait();//如果线程占有CPU期间执行了wait(),就进入中断状态 System.out.println(s+“结束等待,继续买票”);} catch(InterruptedException e){} } fiveNumber=fiveNumber-1;tenNumber=tenNumber-1;twentyNumber=twentyNumber+1;System.out.println(s+“给售票员20元钱,售票员卖给”+s+“一张票,找赎15 6 元”);} else if(receiveMoney==20&&s==“赵”){
while(tenNumber<1){ try{ System.out.println(s+“给售票员20元钱”);System.out.println(“售票员请”+s+“靠边等一会”);wait();//如果线程占有CPU期间执行了wait(),就进入中断状态 System.out.println(s+“结束等待,继续买票”);} catch(InterruptedException e){} }
tenNumber=tenNumber-1;twentyNumber=twentyNumber+1;System.out.println(s+“给售票员20元钱,售票员卖给”+s+“两张票,找赎15元”);}
截屏:
(作业提交说明:实验完成后,将此文档和相关的程序源程序代码一并压缩后提交上来,文件名为自己的学号+实验四,如2008000001+实验四.RAR)
第二篇:多线程实验报告
宁波工程学院电信学院计算机教研室
实验报告
课程名称: Java 2 姓 名: *** 实验项目: 多线程实验 学 号: **** 指导教师: **** 班 级: **** 实验位置: 电信楼机房 日 期:
一、实验目的
1、掌握多线程编程的特点和工作原理;
2、掌握编写线程程序的方法
3、了解线程的调度和执行过程
4、掌握线程同步机理
二、实验环境
windows记事本,java jdk 1.60版本,cmd命令运行窗口
三、实验内容 实验一:
应用Java中线程的概念写一个Java程序(包括一个测试线程程序类TestThread,一个Thread类的子类PrintThread)。在测试程序中用子类PrintThread创建2个线程,使得其中一个线程运行时打印10次“线程1正在运行”,另一个线程运行时打印5次“线程2正在运行
源程序:
public class A { public static void main(String args[]){
Test1 A1;
Test2 A2;
A1=new Test1();
A2=new Test2();
A1.start();
A2.start();} } class PrintThread extends Thread { } class Test1 extends PrintThread { public void run(){
for(int i=1;i<=10;i++)
{
System.out.println(“线程1正在运行!”);
} } } class Test2 extends PrintThread { public void run(){
for(int i=1;i<=5;i++)
{
System.out.println(“线程2正在运行!”);
} } } 运行结果:
实验二:
将上述程序用Runnable接口改写,并上机验证源程序 public class D { public static void main(String args[]){
Move move=new Move();
move.test1.start();
move.test2.start();} } class Move implements Runnable { Thread test1,test2;Move(){
test1=new Thread(this);
test1.setName(“线程1正在运行!”);
test2=new Thread(this);
test2.setName(“线程2正在运行!”);} public void run(){
if(Thread.currentThread()==test1)
{
for(int i=1;i<=10;i++)
{
System.out.println(test1.getName());
} } } else { for(int i=1;i<=5;i++){
System.out.println(test2.getName());} } 运行结果:
实验三:
import java.awt.*;import java.awt.event.*;public class E
{ public static void main(String args[])
{ new FrameMoney();
} } class FrameMoney extends Frame implements Runnable,ActionListener { int money=100;
TextArea text1,text2;
Thread 会计,出纳;
int weekDay;
Button start=new Button(“开始演示”);
FrameMoney()
{ 会计=new Thread(this);
出纳=new Thread(this);
text1=new TextArea(12,15);
text2=new TextArea(12,15);
setLayout(new FlowLayout());
add(start);
add(text1);
add(text2);
setVisible(true);
setSize(360,300);
validate();
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{System.exit(0);
}
});
start.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{ if(!(出纳.isAlive()))
{ 会计=new Thread(this);
出纳=new Thread(this);
}
try
{ 会计.start();
出纳.start();
}
catch(Exception exp){}
}
public synchronized void 存取(int number)//存取方法
{ if(Thread.currentThread()==会计)
{ text1.append(“今天是星期”+weekDay+“n”);
for(int i=1;i<=3;i++)//会计使用存取方法存入90元,存入30元,稍歇一下
{ money=money+number;
//这时出纳仍不能使用存取方法
try { Thread.sleep(1000);//因为会计还没使用完存取方法
}
catch(InterruptedException e){}
text1.append(“帐上有”+money+“万n”);
}
}
else if(Thread.currentThread()==出纳)
{ text2.append(“今天是星期 ”+weekDay+“n”);
for(int i=1;i<=2;i++)//出纳使用存取方法取出30元,取出15元,稍歇一下
{ money=money-number/2;
//这时会计仍不能使用存取方法
try { Thread.sleep(1000);//因为出纳还没使用完存取方法
}
catch(InterruptedException e){}
text2.append(“帐上有”+money+“万n”);
}
}
}
public void run()
{ if(Thread.currentThread()==会计||Thread.currentThread()==出纳)
{ for(int i=1;i<=3;i++)//从周一到周三会计和出纳都要使用帐本
{ weekDay=i;
存取(30);
}
}
} }
运行结果:
}
四、实验心得与小结
通过本次实验,基本了解了线程的概念,作用,方法以及使用规则。1.首先:java 程序是建立在线程之上的。.2.创建线程必须继承 Thread class 它已经为线程的创建和运行做了必要的配置。run是线程就重要的方法。你必须覆写这个方法达到你想要的目的。3.run方法所包含的代码就是和其他线程同时运行的代码以达到同一时刻运行多段代码的目的。当终止了 run以后。这个线程也就结束了。调用线程的 start方法才会执行 run方法。
4.线程的生命周期:新建——Thread.State.NEW:当一个 Thread 类或者其子类的对象被声明并创建时,新的线程对象处于新建状态,此时它已经有了相应的内存空间和其他资源start方法尚未被调整用就绪可执行状态——Thread.State.RUNNABLE:处于新建状态的线程被启动后,将进入线程队列排队,这个时候具备了运行的条件,一旦轮到 CPU 的时候,就可以脱离创建它的主线程独立开始自己的生命周期运行:就绪的线程被调度进入运行状态,每一个 Thread 类及其子类的对象都有一个重要的run方法,当线程对象被调度执行的时候,它将自动调用本对象的 run方法,从第一句代码开始执行。
第三篇:实验四
电 子 科 技 大 学
实
验
报
告
学生姓名:
学 号:
指导教师: 实验地点:
实验时间:
一、实验室名称:
Linux环境高级编程实验室
二、实验项目名称:
插件框架实验
三、实验学时:
4学时
四、实验目的:
需要说明为什么要进行本次实验
五、实验内容:
PPT上的4个版本程序,以及综合练习
六、实验步骤:
PPT上的4个版本程序,以及综合练习
七、总结及心得体会:
八、对本实验过程及方法、手段的改进建议:
报告评分:
指导教师签字:
第四篇:实验四
实习四 图书馆利用基础及中文全文数据库
实习目的:
一、通过实习,了解馆藏书目数据库的基本原理和常用检索途径,熟练掌握查询本馆、相关高校及科研院所图书馆检索书刊信息的方法;树立信息资源共享意识,重点了解国内学术资源分布情况,掌握外文期刊联合目录的使用方法,提升独立获取外文期刊原文的信息能力。
二、了解国内中文全文数据库的收录特点及检索功能,包括电子期刊和电子图书全文数据库,重点掌握清华同方的“中文期刊全文数据库”的使用方法;了解重庆维普的“中文科技期刊数据库(全文版)”和万方数据资源系统的“数字化期刊”等全文数据库的收录范围和使用方法;了解超星数字图书馆等目前国内较常见的电子书刊资源及其常用检索途径和方法。实习题:
一、图书馆利用基础
1、查找厦门理工学院图书馆(http://lib.xmut.edu.cn/index.asp)是否收藏商业模式方面的丛书,若有,请记录你感兴趣的其中一本的书名、编者、出版地、出版社、出版年、分类号、收藏单位、索取号以及出借状态等书目信息。
2、厦门理工学院图书馆是否收藏外文的中国军事百科全书?若有,请问目前收藏有多少分册?可以在厦门理工学院图书馆几楼的哪个书库获取呢?
3、请查找与你所学专业相关的一种期刊,中外文均可,并请记录刊名、有无曾用名、出版地、创刊年、分类号、收藏单位等书目信息。
4、利用搜索引擎查找并登录以下网站,试将每个网站的主页加入“收藏夹”中,以便调用。
(1)登录“厦门理工学院图书馆”主页,浏览其馆藏书目查询功能页面,并自命题查找与你专业密切相关的图书或期刊;
(2)登录并浏览“中国高等教育数字图书馆(CALIS/eduChina)”主页,从主页的“查找全国高校图书馆资料”栏目练习检索有关的图书或期刊;
(3)登录并浏览“国家科技图书文献中心(NSTL)”主页,自命题练习检索相关的图书或期刊,并尝试注册新用户和密码,模拟外文原文订购过程。
二、中文期刊全文数据库
(1)通过校园网进入“万方数据资源”的主页,可以按照“学术期刊”的学科分类或者论文检索途径,找出一种与你所学专业密切相关的期刊,请尝试查阅最新一期刊载的论文全文内容。
(2)通过校园网进入“维普资讯”的主页,练习通过“快速检索”、“高级检索”、“分类检索”、“期刊导航”等途径查找自己感兴趣的学术论文,并浏览文献题录及全文内容(练习题目可自选,或参考前面题目)。在使用过程中,请思考以上三个资源站点之间有何异同。
(3)通过校园网分别登录“超星数字图书馆”、“读秀学术搜索”或“书生之家”等电子图书阅读网,浏览各网站的栏目信息,尝试查找和阅读相关专业的图书全文。
【实验报告提交】
1、作业以WORD格式完成,在同一个文档中无需分开,标明题目即可。可发送到邮箱jihuish@126.com(邮件标题请注明学号和姓名),或者提交打印稿均可。
2、作业须由自己完成,如发现有copy行为,取消实验成绩;
3、本次实验成绩记入平时成绩的10%。
第五篇:实验四总结报告
《数据库原理与应用》实验报告
实验名称: 实验四
学号: 班级:
姓名: 软件工程
一、实验目的
(1)了解Oracle数据库中的用户管理,模式,权限管理和角色管理。
(2)掌握为用户分配权限的方法。
(3)了解为不同用户分配不同权限的目的及原因。
二、实验过程
1.用系统帐户sys登录数据库,分别创建数据库内部用户user_one和user_two,创建时自己为用户分配帐户口令。
create user user_one
identified by 980916
default tablespace users
temporary tablespace temp
quota unlimited on users;create user user_two
identified by 980916
default tablespace users
temporary tablespace temp
quota unlimited on users;/ 14
2.为了使两位用户登录数据库请为其授予相应的权限。
grant create session to user_one,user_two;
3.授予用户user_one在自己模式下创建表的权限,在任何模式下删除表的权限,授予用户user_two可以在任何模式下创建表的权限,查询任何模式下表中数据的权限和在任何模式下创建视图的权限。
grant create table,drop any table to user_one;grant create any table,select any table,create any view to user_two;
/ 14 4.分别用user_one和user_two登录,写出相应的SQL语句验证为其授予的权限。(如果建立的表中有主键约束,需要预先授予user_one和user_two用户create any index的权限。)
grant create any index to user_one,user_two;在user_one中建表A create table a(x number,y date);
在user_two中建表B create table b(x number,y date);
在user_two中查询表A select * from user_one.a;3 / 14
从user_one中删除表B drop table user_two.b;在user_two中查询表B Select * fromb;
在user_two中建立视图VIEW_A create view view_a(x,y)
as select x,y
from b;/ 14
5.用系统帐户sys登录数据库,创建用户user_three,将角色权限DBA授予用户user_three,并将S、P、J、SPJ四张表导入到user_three模式下。
create user user_three
identified by 980916
default tablespace users
temporary tablespace temp
quota unlimited on users;grant dba to user_three;/ 14
6.使用user_three登录,完成如下授权,在user_one和user_two用户下执行相应的SQL语句验证授权是否成功。
(1)把对表S的INSERT权力授予用户user_one,并允许他再将此权限授予其他用户。
grant insert on s to user_one with grant option;
在user_one中插入数据
insert into user_three.s(sno,sname,city,sphone)
values('1','a','湖北',null);
commit;
grant insert on user_three.s to user_two;在user_two中插入数据
insert into user_three.s(sno,sname,city,sphone)6 / 14
values('2','b','湖北',null);
commit;
(2)用户user_two对S,P,J三个表有SELECT和INSERT权力
grant select,insert on s to user_two;grant select,insert on p to user_two;grant select,insert on j to user_two;
从user_two中查询表S select * from user_three.s;/ 14
从user_two中给表S插入数据
insert into user_three.s(sno,sname,city,sphone)
values('3','c','湖北',null);
commit;
(3)用户user_one对SPJ表有DELETE权力,对QTY字段具有UPDATE权力。
grant delete,update(qty)on spj to user_one;
在user_one中删除sno为s1的数据
delete from user_three.spj where sno='S1';
commit;/ 14
在user_one中将sno为s2的数据的qty改为0 update user_three.spj set qty=0 where sno='S2';
commit;
(4)收回user_one对S表的插入权限。
revoke insert on s from user_one;
尝试在user_one中插入数据
insert into user_three.s(sno,sname,city,sphone)
values('3','d','湖北',null);
commit;9 / 14
7.把对用户user_two授予的所有权限收回,只保留登录权限。(系统权限和对象权限应该分别收回)
revoke select,insert on s from user_two;revoke select,insert on p from user_two;revoke select,insert on j from user_two;revoke create any index,create any table,create any view,select any table from user_two;
尝试在user_two中创建表C create table c(x number,y date);10 / 14
8.用系统帐户sys登录数据库,创建用户user_four,将角色权限DBA授予此用户,在user_four的模式下导入Sudent、Course和SC表。
create user user_four
identified by 980916
default tablespace users
temporary tablespace temp
quota unlimited on users;grant dba to user_four;/ 14
9.使用user_four登录,创建角色STUDBA,将修改Student、Course、SC表结构的权限,插入、删除、修改和查询三张表中数据的权限授予角色STUDBA,将角色的权限授予user_one和user_two。
create role studba;grant alter,insert,delete,update,select on s to studba;grant alter,insert,delete,update,select on c to studba;grant alter,insert,delete,update,select on sc to studba;grant studba to user_one,user_two;commit;/ 14
10.对于通过STUDBA角色授予的权限,在user_one和user_two用户下执行相应的SQL语句对权限进行验证。
修改表权限验证
alter table user_four.c add collage varchar2(40);commit;select * from user_four.c;
更新数据验证
update user_four.s set major='软件工程' where major='植物保护';select * from user_four.s where major='植物保护';
插入数据验证 / 14
insert into user_four.sc(sno,cno,grade)values(103000,300,100);commit;select * from user_four.sc where sno=103000 and cno=300;
删除数据验证
delete from user_four.sc where sno=103000 and cno=300;commit;select * from user_four.sc where sno=103000 and cno=300;
三、实验总结 / 14