java第一次概述文档格式.docx
- 文档编号:14740854
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:20
- 大小:20.86KB
java第一次概述文档格式.docx
《java第一次概述文档格式.docx》由会员分享,可在线阅读,更多相关《java第一次概述文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
4.掌握Java中线程的同步与互斥的实现
二、实验内容
1.验证课堂练习的结果,下面是课堂练习的内容:
(1)编写一个程序,能够根据用户的输入的数值生成相应数目的线程,每1秒后结束。
(2)编写一个程序,能够生成n个线程,每个线程每隔1秒打印自己的序号,当用户输入m后第m个线程结束。
(3)编写一个程序,能够生成n个线程,每个线程打印自己的序号后结束,但要求最终的打印的结果为n,n-1,……1。
2.将第三题改写为能够按照任意顺序结束。
3.编写一个程序(由若干个类组成),该程序能够生成3个线程,其中2个线程向一个队列中写入数据,每次写入1个字节,1个线程从队列中读出数据,一次2个字节。
要求读写交替运行,并注意数据的同步,而且队列要借助数组实现。
三、实验步骤
1.运行Eclipse,在其中新建一个Java工程JavaNetwork;
2.创建packagelab.lab2,并在其中创建一个Java类FirstThread并运行查看结果,其代码如下:
packagelab.lab2;
importjava.io.*;
publicclassFirstThreadextendsThread{
publicstaticvoidmain(String[]args){
intn;
try{
n=Integer.parseInt((newBufferedReader(newInputStreamReader(System.in))).readLine());
for(inti=0;
i<
n;
i++){
(newFirstThread()).start();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
publicvoidrun(){
System.out.println("
Threadstarted...."
);
Thread.sleep(1000);
}catch(InterruptedExceptione){
Threadended."
}
}
运行该程序后,程序会等待用户的输入,如果用户输入:
3
结果将会是:
Threadstarted....
Threadended.
即程序会根据用户输入的数值来生成相应数目的线程,每个线程运行1秒后结束。
3.在packagelab.lab2中创建一个Java类SecondThread并运行查看结果,其代码如下:
publicclassSecondThreadextendsThread{
privateintid;
privatebooleanflag=true;
privatestaticSecondThreadt[];
privatestaticintn=5;
publicSecondThread(intid){
this.id=id;
publicvoidstopThread(){
flag=false;
publicbooleangetThreadState(){
returnflag;
publicstaticvoidmain(String[]args){
intm;
t=newSecondThread[n];
for(inti=0;
(t[i]=newSecondThread(i)).start();
while(testThreads()){
try{
m=Integer.parseInt((newBufferedReader(
newInputStreamReader(System.in))).readLine());
t[m].stopThread();
}catch(IOExceptione){
e.printStackTrace();
}
programended."
Thread"
+id+"
started...."
while(flag){
Thread.sleep(1000);
}catch(InterruptedExceptione){
ended."
privatestaticbooleantestThreads(){
booleanflag=false;
flag|=t[i].getThreadState();
运行该程序后,屏幕将首先出现:
Thread0started....
Thread1started....
Thread2started....
Thread3started....
Thread4started....
然后等待用户输入,如果这时用户依次输入0、3、2、1、4,屏幕将依次出现
Thread0ended.
Thread3ended.
2
Thread2ended.
1
Thread1ended.
4
programended.
Thread4ended.
即程序会根据用户输入的数值来结束相应序号的线程,所有线程结束后程序结束。
4.在packagelab.lab2中创建一个Java类ThirdRunnable并运行查看结果,其代码如下:
publicclassThirdRunnableimplementsRunnable{
privatestaticintstopid=-1;
staticintn=10;
publicThirdRunnable(intid){
for(inti=1;
=n;
newThread(newThirdRunnable(i)).start();
stopid=n;
while(id!
=stopid){
Thread.yield();
stopid--;
运行该程序后,屏幕将出现:
Thread5started....
Thread6started....
Thread7started....
Thread8started....
Thread9started....
Thread10started....
Thread10ended.
Thread9ended.
Thread8ended.
Thread7ended.
Thread6ended.
Thread5ended.
即程序会根据按照正序启动10个线程,然后逆序结束线程。
5.将ThirdRunnable类改写,使其能够按照任意顺序结束;
下面是就是改写后的结果。
publicclassFourthRunnableimplementsRunnable{
//线程按照下面熟组元素的顺序依次结束。
privatestaticintt[]={4,5,9,3,1,0,2,6,8,7};
privatestaticintstopid=0;
publicFourthRunnable(intid){
t.length;
(newThread(newFourthRunnable(i))).start();
Thread.sleep(2000);
=t[stopid]){
stopid++;
四、调试分析
在调试线程程序的过程中,并干扰到其它应用程序的正常运行,后来经过仔细观察,发现是因为在线程的循环体当中没有调用sleep语句,从而导致线程不断地抢占CPU,从而影响其它程序的正常运行。
五、实验结果
按照指导书的步骤完成了第1题和第2题,同时编写程序完成了第3题,达到了所要求的实验结果。
第3题的源代码如下:
//环形队列
publicclassDataQuque{
finalintMAXLENGTH=10;
byte[]data=newbyte[MAXLENGTH];
intlength;
intstartpos;
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 第一次 概述