第一篇: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