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