java实验报告多线程异常处理

信 息 工 程 学 院

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;

运行结果:

java实验报告多线程异常处理

实验题 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;

运行结果:

java实验报告多线程异常处理

实验题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次,观察每次运行结果是否相同。

运行结果:

java实验报告多线程异常处理

java实验报告多线程异常处理

java实验报告多线程异常处理

结果1 结果2 结果

java实验报告多线程异常处理

3

java实验报告多线程异常处理

结果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());

运行结果:

java实验报告多线程异常处理

实验题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;

}

运行结果:

java实验报告多线程异常处理

实验题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;

} }

运行结果:

java实验报告多线程异常处理

实验题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+" 不合理 "+" 请重新输入……";

运行结果:

java实验报告多线程异常处理

实验总结:

这次实习中,我遇到了不少问题,比如在第二道题目中出现了多个窗口同时售出一张票,或者有的票会被多次卖出。经过与同学同学讨论以及看过书后才了解到synchronized关键字限定的代码块不同时,代码运行的结果就不同。

通过这次实习,最终我还是掌握Java的异常处理机制及相关实现方法。能够在程序设计中运用异常及相关类及对象,明白了Java多线程的同步问题。

good

2012-05-28

 

第二篇:java多线程实验报告

计算机科学与技术学院实验报告(电子版)

课程:  Java程序设计    

相关推荐