CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

异常处理会对线程的运行产生影响吗?

楼主llsoft(天堂鱼)2002-05-22 18:25:13 在 Java / J2SE / 基础类 提问

今天在做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

相关问题

  • 多线程程序中子线程能否将自己kill掉,但不影响其他子线程和主线程的运行?
  • 独立线程,独立存放区域和独立的socket进行通信,却发现当A线程运行,影响B线程,为什么?
  • 如何运行多线程
  • 运行线程时死机?
  • 怎样自定义消息。在线程运行时发出消息,主程序收到消息后处理?
  • 频繁执行这样一个过程,(建立线程->在线程中处理数据->关闭线程),会不会对系统产生不良影响?
  • 如何停止1个线程运行?
  • 一运行下面线程就跳出
  • 多线程运行程序就死掉
  • 如何判断线程正在运行

关键词

  • 线程
  • 打印
  • 队列
  • 任务
  • 放入
  • 产生
  • 异常
  • printer
  • 问题

得分解答快速导航

  • 帖主:llsoft
  • pengji
  • weblive
  • gdsean
  • GJA106

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo