版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1实验四 多线程异常处理1实验目的(1) 掌握 Java 的异常处理机制及相关实现方法能够在程序设计中熟练运用异常及相关 类及对象;(2) 掌握 Java 多线程的概念和实现方法;(3) 掌握 Java 多线程的同步问题;2实验内容实验题1创建两个线程,一个线程打印“ A ”,另一个线程打印“ B”,比如ABBABAABBA.实验代码:package xuguigui;public class SimpleThread extends Threadpublic SimpleThread(String name) setName(name);public void run() int i=0;
2、while (i+ <5) try System. out .print(getName()+ " " ); /Thread.sleep(1000);catch (Exception e) e.printStackTrace(); package xuguigui;public class Xu public static void main(String args) SimpleThread thread1=new SimpleThread("A" );SimpleThread thread2=new SimpleThread("B&q
3、uot; );thread1.start(); thread2.start();程序运行结果:Problems<® Javadoc冏 Decoration曰 Console 必<terminated testl Java Appkation E:rrveclepseMrebiniavaw,exeBAABBAABABBAABB ABABA100实验题2 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点 毫秒买一张票。打印出售票过程,注意使用sy nchro ni zed 确保同一张票只能卖出一次。出格式如下:第4售票点卖出第100张票第2售票点卖出第101
4、张票”程序代码:package xx;public class testxxexte ndsThread int ticket = 200;Stringname =""publicvoid run() while ( true ) synchronized ( name) if ( ticket <= 0)break ;System. out .println("第"+Thread. curre ntThread ().getName()+ "售票点卖岀第“ + ticket - +"张票“);try Thread. sleep
5、 (100); catch (InterruptedException e) e.pri ntStackTrace();package xx;publicclass Ticket publicstaticvoidmain( Stri ng args)testxx t =new testxx();new Thread(t,"1" ).start();new Thread(t,"2" ).start();new Thread(t,"3" ).start();new Thread(t, new Thread(t, new Thread(t,
6、 new Thread(t, new Thread(t, new Thread(t,"4" ).start();"5" ).start();"6" ).start();"7" ).start();"8" ).start();"9" ).start();new Thread(t,"10" ).start();程序运行结果:幕1售票点妥出第10采票碧2售票点卖出第9张票君4售票点卖出第8张票窘6售票点卖出第7张票為8售票点卖出第6张票窘3售票点卖出第5张票碧5
7、售票点卖出第4张票|幕10售票点卖出第3张票幕9售票点卖出第2张票蓉7售票点卖出第1张票此题主要考察sy nchroni zed()同步代码块的理解和使用。在程序中执行到synchroni zed设定的同步化区块时锁定当前对象,这样就没有其他线程可以执行这个被同步化的区块了。另,代码中调用了Thread类中的currentThread()方法,返回对当前正在执行的线程对象的引用。实验题3假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总 额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。 程序如下:class CBa nk private st
8、atic int sum=0;public static void add(i nt n)int tmp=sum;tmp=tmp+n; /累加汇款总额try小睡几秒钟Thread.sleep(int)(10000*Math.random(); /catch(l nterruptedExcepti on e)sum=tmp;System.out.pri ntl n("sum= "+sum);class CCustomer extends Thread / CCustomer类,继承自 Thread 类 public void run() / run() methodfor(i
9、 nt i=1;i<=3;i+)CBank.add(100); /将100元分三次汇入public class Ex6_1 public static void main(String args) CCustomer c1= new CCustomer();CCustomer c2=new CCustomer();c1.start(); c2.start();基本要求运行程序5次,观察每次运行结果是否相同。1 ProblemsF* Problems CBj. Problems <E_. Problems|Problems<terminated> E<ternnin
10、3ted > E< terminated >< termi nated>sura- 100sum- 100|s3IE= 100sum- 100巴 ujl 1003uic= 200sui 100suin= 2003TJIE= 200pum 100sum= 3003L1IE= 2003UIE= 100sum= 100suit尸2 00S'JIL= 100suff- 2QQsum= 2003TJIE= 3002 Q0sum= 200sum= 3003-JIE= 300suir= 200Isun 3003UIE= 3003L1IL= 300sum= 3003005
11、 uir.= 300思考问题程序运行结果每次是否相同,运行时间是否相同,为什么? 要使程序运行结果每次相同,应该怎样修改程序?将睡眠时间由原来的随机改成一个确定的毫秒数,比如sleep ( 100),则运行结果和运行时间就一样了。程序中为什么要使用异常处理?执行sleep ()方法后,当前线程将休眠指定的时间段,如果任何一个线程中断了 当前线程的休眠,该方法将抛出In terruptedException异常对象,所以在使用sleep ()方法时,必须捕获该异常。类型被0除的异常,并用类的对象 e的方法getMessage实验题4在程序中主动产生一个 ArithmeticException c
12、atch语句捕获这个异常。最后通过ArithmeticException给出异常的具体类型并显示出来。程序代码:package xx;public class Test public static voidmain( Stri ng arg3) System. out .println("这是一个异常处理的例子n");try int i = 10;i /= 0; catch (ArithmeticException e) System. out .println( "异常是:"+ e.getMessage(); fin allySystem. out .
13、println( "finally 语句被执行");程序运行结果:ProblefTiMJavBcJac; | 曉 Declarationterminated > Test (1) Java Application匚:Progra 这是一个异常处理的例子 异常是 :/ by zero finally语旬被执行实验题5在一个类的静态方法mathod ()方法内使用throw 产生异常,使用throws子句抛出mathod ()的异常,在 ma in方法中捕获处理异常。程序代码:package xx;public class Test2 static void throwP
14、rocess() try throw new NullPointerException(“ 空指针异常“); catch (NullPointerException e) System. out .println( "n 在 throwProcess方法中捕获一个"+e.getMessage();throw e;public static void main( Stri ng args) try throwProcess (); catch (NullPointerException e) System. out .println("再次捕获:"+ e)
15、;程序运行结果:pSf Problem壬 f ® Jawadx | 冏 Dedaratjcm S Console -terminated > Test2 Java Application C:Program FilesXJavajreSXbinjavaw.|在throwFrocess方法中捕获一个空指针异常再次捕获: J aualangf .MullEoin匸已mEjcu亡ft Ion: 空扌旨针异常实验题6在try 子句中设计两个以上可能出现的异常。通过多个catch子句分别来捕获异常。并使用fin ally子句确保一段代码不管发生什么异常都能被执行。程序代码:package
16、 xx;public class Catch public static void main( Stri ng args) int a = 1,2,3,4,5;int b = 1,0,3,0;for ( int i=0;i<a.length;i+)try System. out .println(ai/bi); catch(ArrayIndexOutOfBoundsException m) System. out .println("数组下表越界!");System. out .println("错误:"+ m.getMessage(); catc
17、h(RuntimeException e) System. out .println("除数不能为零!");System. out .println("错误:"+ e.getMessage();/TODO Auto-ge nerated catch block fin ally System. out .println("finally后面的语句永久打印!”);程序运行结果:Problems血 Javadoc 艮Declaration Console 沒<termiriat6d> Cat ch java Application C:
18、Program Fil1finaLLyJa面的语旬永灵打印!除数不能为零!错误:/ by zerofmally/S面的语旬永久打印!1finally/a面的语句永久打印! 吟彗不能为零!错i吴:/ by zerofiiially/g面的语句永久打印!数组下表越界! 错误:弓、finally/o面的语句永久打印!实验题7编写一个程序,输入一个班某门课程成绩,统计及格人数、不及格人数平均分。为此设计一个异常类,当输入的成绩小于0分或大于100分时,抛出异常,程序将捕捉这个异常,并作出相应处理。基本要求编写完整程序程序代码:package xx;class MinusException extend
19、sArithmeticException publicMin usExcepti on() publicMin usExcepti on( Str ing str) super (str);package xx;class OverException extendsArithmeticException public OverExcepti on() publicOverExcepti on( Stri ng str) super (str); package xx;import java.util.*;public class TestScore public static void jud
20、gescore( int i) throwsMin usExcepti on,OverExcepti on if (i < 0)throw new MinusException("分数不能为负数");if (i > 100)throw new OverException( "分数超过 100,过大!");public static voidmain( Stri ng args) int array = 0, 0 ;intturn = 1;double total = 0;Sca nner in put =new Sca nn er(System.in );int score = 0;System. out .println( "请输入学生成绩,输入-1退岀:");System. out .print( "请输入"+ turn +"个学生成绩:");score = in put .n extI nt();while (score != -1) try judgescore (score); if (score < 60)+array0;if (score >= 60)+array1;total += scor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 氢气专项施工方案(3篇)
- 沟渠围挡施工方案(3篇)
- 厂房总施工方案(3篇)
- 中秋售卖活动策划方案(3篇)
- 制作柜子施工方案(3篇)
- 零售行业库存管理指南(标准版)
- 培训机构如何续班
- 2025年中职数控管理(管理技术)试题及答案
- 2025年大学单板滑雪平行大回转运动与管理(平行大回转技术)试题及答案
- 2025年高职会计(高级财务会计)试题及答案
- 教师课程开发能力提升专题培训心得体会
- 2025年山西省中考英语试卷真题(含答案详解)
- TD/T 1036-2013土地复垦质量控制标准
- 车位包销合同协议模板
- 《FPC材料介绍》课件
- 员工转岗协议书范本
- 四川省遂宁市射洪县九年级2024-2025学年(上)期末化学试卷(含答案)
- 2025-2030中国器官芯片行业市场发展趋势与前景展望战略研究报告
- 医院医疗保险费用审核制度
- 村卫生室医疗质量相关管理制度
- 中小学校园中匹克球推广策略与实践研究
评论
0/150
提交评论