多线程异常处理

多线程异常处理
多线程异常处理

实验四多线程异常处理

1.实验目的

(1) 掌握Java的异常处理机制及相关实现方法能够在程序设计中熟练运用异常及相关类及对象;

(2) 掌握Java多线程的概念和实现方法;

(3) 掌握Java多线程的同步问题;

2.实验内容

实验题1创建两个线程,一个线程打印“A”,另一个线程打印“B”,比如ABBABAABBA….

实验代码:

package xuguigui;

public class SimpleThread extends Thread{

public SimpleThread(String name)

{

setName(name);

}

public void run(){

int i=0;

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");

thread1.start();

thread2.start();

}

}

程序运行结果:

实验题 2假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。输出格式如下:

第4售票点卖出第100张票

第2售票点卖出第101张票……

程序代码:

package xx;

public class testxx extends Thread {

int ticket = 200;

String name = "";

public void run() {

while (true) {

synchronized (name) {

if (ticket <= 0)

break;

System.out.println("第" +

Thread.currentThread().getName()

+ "售票点卖出第" + ticket-- + "张票");

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

package xx;

public class Ticket {

public static void main(String[] args){

testxx t = new testxx();

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

}

}

程序运行结果:

此题主要考察synchronized()同步代码块的理解和使用。在程序中执行到synchronized设定的同步化区块时锁定当前对象,这样就没有其他线程可以执行这个被同步化的区块了。另,代码中调用了Thread类中的currentThread()方法,返回对当前正在执行的线程对象的引用。

实验题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())); // 小睡几秒钟

}

相关主题
相关文档
最新文档