异常处理会对线程的运行产生影响吗?
今天在做SL-275的练习题labfile 中的mod14/exercise3时,碰到了这个奇怪的问题。大家有没有碰到类似的问题?
问题点数:50、回复次数:5Top
1 楼pengji(彭乃超)回复于 2002-05-23 12:49:31 得分 5
你的问题不明确,应该说有的会,有的不会!Top
2 楼weblive(沒有)回复于 2002-05-23 13:29:20 得分 10
如果抛出异常,不管什么都会受到影响!你说线程呢??Top
3 楼gdsean(摇滚java)回复于 2002-05-23 13:37:56 得分 10
抛出异常,不捕捉处理,线程就会停止运行Top
4 楼llsoft(天堂鱼)回复于 2002-05-24 19:38:55 得分 0
谢谢几位了,不捕获异常的话,发生异常的现成的确会停止。现在又有个具体一点的问题。
一个多线程共享资源的问题--打印问题,有三个线程分别产生某一数量的打印任务,另有一个线程处理打印,他们共享一个存放打印任务的队列,该队列有个addBack()方法,把打印任务放入队列中,当队列满了时产生一个异常。我的问题是当一个产生打印任务的线程向队列中放入一任务时,由于队列已满,则放入失败。(该线程接着还有几个打印任务要放入)那么怎么把刚才这个任务再放入队列中?Sl275练习(labfile)mod14/exercise3的答案是:
(产生打印任务的线程)
public class Producer implements Runnable {
.........
public void run() {
Printer printer = Printer.getPrinter();
PrintJob job = null;
boolean job_posted = false;
for ( int i = 1; i <= numberOfJobs; i++ ) {
// generate new print job
job = new PrintJob(producerName + "#" + i, sizeOfJobs);
do {
try {
System.out.println("P: Adding job '" + job.getJobName()
+ "' to the queue");
printer.addJob(job);//把任务放入队列中
job_posted = true;
} catch (FullQueueException e) {
System.out.println("P: Print queue is full, trying
again...");
}
} while ( ! job_posted );
// sleep between jobs
try {
Thread.sleep(delayBetweenJobs);
} catch (InterruptedException e) {
System.out.println("P." + producerName + " was
interrupted.");
}
}
.....
}
队列第一次满时,上面的do while 循环产生作用,但是后面就不行了!不知道是为什么?
Top
5 楼GJA106(中文字符)回复于 2002-05-24 21:45:26 得分 25
do {
try {
System.out.println("P: Adding job '" + job.getJobName()
+ "' to the queue");
printer.addJob(job);//把任务放入队列中
job_posted = true;
} catch (FullQueueException e) {
System.out.println("P: Print queue is full, trying
again...");
}
} while ( ! job_posted );
改为:
do {
try {
System.out.println("P: Adding job '" + job.getJobName()
+ "' to the queue");
printer.addJob(job);//把任务放入队列中
job_posted = true;
} catch (FullQueueException e) {
System.out.println("P: Print queue is full, trying
again...");
continue;//继续循环可以sleep一会儿
}
} while ( ! job_posted );
Top




