java多线程实验报告范文
java多线程实验报告
篇一:西北农林科技大学java多线程实验报告 实验7 多线程 1.实验目的 (1) 掌握Java多线程的概念和实现方法 (2) 掌握Java多线程的同步问题 2.实验内容 任务一:火车售票 假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。程序运行结果见左图。 打开Eclipse Tickets.java public class Ticket extends Thread { int ticket =1000; String name =""; public void run(){ while(true){synchronized(name){ if(ticket System.out.println("第" + Thread.currentThread().getName()+ "售票点卖出了第" + ticket-- + "张票"); } } } }} try{ } catch(InterruptedException e){ } Thread.sleep(100); Test.java public class Test { } public static void main(String args[]){} Ticket t = new Ticket(); new Thread(t,"1").start(); new Thread(t,"2").start(); new Thread(t,"3").start(); new Thread(t,"4").start(); new Thread(t,"5").start(); new Thread(t,"6").start(); new Thread(t,"7").start(); new Thread(t,"8").start(); new Thread(t,"9").start(); new Thread(t,"10").start(); 任务二:银行存款 假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有两个顾客,每人都分3次,每次100元将钱到入。试编写一个程序,模拟实际作业。 程序如下: classCBank { private static int sum=0; public static void add(int n){ inttmp=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(inti=1;i CBank.add(100); // 将100元分三次汇入 } } public class Ex7_1 {public static void main(String args[]) { CCustomer c1=new CCustomer(); CCustomer c2=new CCustomer(); c1.start();c2.start(); } } [基本要求] 运行程序5次,观察每次运行结果是否相同。 [思考问题] 运行结果每次是否相同,运行时间是否相同,为什么? ①要使程序运行结果每次相同,应该怎样修改程序? ②程序中为什么要使用异常处理? 答:运行程序5次,观察每次运行结果不相同: 运行结果每次是否相同,运行时间不相同,因为程序不同步。 ①为了使程序运行结果每次相同,程序修改如下: CBank.java class CBank { private static int sum=0; public synchronized static void add(int n){ int tmp=sum; tmp=tmp+n;// 累加汇款总额 try{ Thread.sleep((int)(10000*Math.random())); // 小睡几秒钟