信 息 工 程 学 院
Java程序设计 实习报告
多线程异常处理
1.实验目的
(1) 掌握Java的异常处理机制及相关实现方法能够在程序设计中熟练运用异常及相关类及对象;
(2) 掌握Java多线程的概念和实现方法;
(3) 掌握Java多线程的同步问题;
2.实验内容
实验题1 创建两个线程,一个线程打印“A”,另一个线程打印“B”,比如ABBABAABBA….
主要代码:
package package1;
public class TestThread {
}
package package1;
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Printout A_Print = new Printout('A'); Printout B_Print = new Printout('B'); A_Print.start(); B_Print.start(); }
实验报告的内容与格式按任课教师的要求书写。
public class Printout extends Thread {
public char out;
Printout(char temp){
}
} public void run(){ } for(int i=0;i<5;i++){ System.out.print(out); } out = temp;
运行结果:
实验题 2 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。输出格式如下:
第4售票点卖出第100张票
第2售票点卖出第101张票 ??
主要代码:
package package2;
public class SellTicket extends Thread{
int Sellnum; static int Ticketnum = 0; SellTicket(int index){
} Sellnum = index; public void run(){ while(true){ synchronized(this){ if(Ticketnum<1000){ Ticketnum++; System.out.println("第"+Sellnum+"售票点卖出第
"+Ticketnum+"张票");
} } } } } else{ } try{Thread.sleep(500); } catch(InterruptedException e){} break; //return 1;
运行结果:
实验题3 假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款
的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。
程序如下:
class CBank
{ private static int sum=0;
public static void add(int n){
int tmp=sum;
tmp=tmp+n; // 累加汇款总额
try{
Thread.sleep((int)(10000*Math.random())); // 小睡几秒钟 }
catch(InterruptedException e){}
sum=tmp;
System.out.println("sum= "+sum);
}
}
class CCustomer extends Thread // CCustomer类,继承自Thread类
{ public void run(){ // run() method
for(int 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 结果2 结果
3
结果4 结果5
[思考问题] 程序运行结果每次是否相同,运行时间是否相同,为什么? 答:在add()函数前加synchronized关键字。
② 程序中为什么要使用异常处理?
答:程序调用了sleep()函数,可能被中断,产生异常。
实验题4在程序中主动产生一个ArithmeticException 类型被0 除的异常, 并用catch 语句捕获这个异常。最后通过ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。
主要代码:
package package4;
public class EX_4_4 {
} /** * @param args */ public static void main(String[] args) { } // TODO Auto-generated method stub int up = 1; int down = 0; int result = 0; try{ result = up/down; }catch(ArithmeticException e){ } System.out.println(e.getMessage());
运行结果:
实验题5 在一个类的静态方法mathod() 方法内使用throw 产生异常,使用throws 子句抛出mathod()的异常,在main 方法中捕获处理异常。
主要代码:
package package5;
public class Throws {
static void mathod(){ try{throw new ArithmeticException(" !!! "); }catch(ArithmeticException e){ System.out.println("mathod()捕获异常为:
"+e.getMessage());
} } throw e;
}
运行结果:
实验题6 在try 子句中设计两个以上可能出现的异常。通过多个catch 子句分别来捕获异常。并使用finally子句确保一段代码不管发生什么异常都能被执行。
主要代码:
package package6;
public class MultThrow {
String S1,S2; public MultThrow(String S1,String S2){ } public void testOut(){ int n=0,m=0,s=0; try{n=Integer.parseInt(S1); m=Integer.parseInt(S2); s=m/n; } catch(ArithmeticException a){ } catch(NumberFormatException e){ } finally{ } System.out.println("in finally"); System.out.println(e.getMessage()); System.out.println(a.getMessage()); this.S1 =S1; this.S2 =S2;
} }
运行结果:
实验题7 编写一个程序,输入一个班某门课程成绩,统计及格人数、不及格人数平均分。为此设计一个异常类,当输入的成绩小于0分或大于100分时,抛出异常,程序将捕捉这个异常,并作出相应处理。
主要代码:
package package7;
import java.util.Scanner;
public class Grade {
int Pass; int UnPass; int Sum; int n; public Grade(int n){ } public void setScore() throws ScoresException { Pass=0; UnPass=0; Sum=0; this.n=n;
} } int temp=0; Scanner scanner = new Scanner(System.in); temp = scanner.nextInt(); if(temp>100 ||temp<0){ } else{ if(temp>=60){ } else{ } Sum+=temp; } UnPass++; Pass++; throw new ScoresException(temp); public void Display(){ } System.out.println("Passed number is: "+ Pass); System.out.println("Unpassed number is: "+ UnPass); System.out.println("average score is: "+ Sum/n);
package package7;
public class ScoresException extends Exception {
} String message; public ScoresException(int m){ } public String toString(){ } return message; message = "当前输入成绩为 "+m+" 不合理 "+" 请重新输入……";
运行结果:
实验总结:
这次实习中,我遇到了不少问题,比如在第二道题目中出现了多个窗口同时售出一张票,或者有的票会被多次卖出。经过与同学同学讨论以及看过书后才了解到synchronized关键字限定的代码块不同时,代码运行的结果就不同。
通过这次实习,最终我还是掌握Java的异常处理机制及相关实现方法。能够在程序设计中运用异常及相关类及对象,明白了Java多线程的同步问题。
good
2012-05-28
计算机科学与技术学院实验报告(电子版)
课程: Java程序设计
JAVA语言程序设计实验报告实验三实验题目:异常处理指导老师:卢照专业班级:计算机科学与技术系1106班姓名:李锋(20xx100…
中南财经政法大学武汉学院实验报告实验课名称JAVA语言学生姓名专业班级网络工程1104学号11071125开课时间20xx年2月2…
西安邮电大学计算机学院Java程序设计课内实验报告实验名称异常处理专业名称班级学生姓名1201学号8指导教师实验日期20xx年04…
实验报告课程名称Java语言程序设计院系管理学院专业班级姓名学号指导教师20xx年6月7日第1页Java语言程序设计上机实验报告一…
数学与计算科学学院实验报告实验项目名称JAVA调试环境及异常处理程序所属课程名称面向对象技术实验类型设计型实验日期20xx41班级…
JAVA语言程序设计实验报告实验三实验题目:异常处理指导老师:卢照专业班级:计算机科学与技术系1106班姓名:李锋(20xx100…
实验四Java输入、输出和异常处理一、实验目的1.了解I/O流的使用;2.掌握常见的输入/输出流类及其主要方法。3.熟悉Syste…
实验报告计算机与信息工程学院实验中心学期20xx20xx课程名称Java程序设计实验班级信息1202姓名方逸梅学号12121002…
中南财经政法大学武汉学院实验报告实验课名称JAVA语言学生姓名专业班级网络工程1104学号11071125开课时间20xx年2月2…
西安邮电大学计算机学院Java程序设计课内实验报告实验名称异常处理专业名称班级学生姓名1201学号8指导教师实验日期20xx年04…
Java程序设计实验指导报告书目录实验1熟悉Java开发环境2实验2简单的输入输出处理3实验3类的练习6实验4Java图形用户界面…