多线程同步时其中一个线程出异常其它线程会不会继续执行?

解决方案 »

  1.   

    线程代码中产生异常的话,那么这个线程的生命周期就结束了,这种情况称为线程泄漏。注意,只是这个线程的生命结束了,但其他的线程还是活着的。如果是代码有 BUG,那其他线程走到这一块估计也会挂掉的。
      

  2.   

    会继续执行package test;
    public class ExceptionInThread extends Thread{

    Integer id;
    ExceptionInThread(Integer id){
    this.id = id;
    }
    /**
     * @param args
     */
    synchronized void go(){
    System.out.println("id is " + id);
    throw new java.lang.NullPointerException();
    }

    public void run(){
    // Bean b = new Bean();
    // b.go(1);
    this.go();
    }

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Thread ct = new ExceptionInThread(1);
    Thread ct2 = new ExceptionInThread(2);
    ct.start();
    ct2.start();
    }}
      

  3.   

    线程与线程之间除非你刻意安排,否则是无关的。也就是说,线程A里有了异常并不会影响线程B。如果对于线程这些东西并不熟悉,而又想要做好并发处理的代码,可以考虑用我做的一些开源的工具类:http://jabb.sourceforge.net/javadoc/net/sf/jabb/util/thread/package-summary.html,文档可看这个PDF的最后一部分:http://jabb.sourceforge.net/doc/jabb_intro.pdf这些类构成了一个小型的框架,能够简化多线程并行数据处理的程序开发。用起来很简单,只要这样:
    1. 创建你自己的处理实现类,继承QueueProcessor或者QueueBatchUniqueProcessor,实现其中的process()方法。
    2. 用BlockingQueue的实例来存放待处理的数据
    3. 对于你自己的处理实现类,创建足够多的实例。每个实例都会有一个对应的工作线程在需要的时候被创
    建。
    4. 创建一个QueueConsumerGroup的实例来管理和控制整个多线程数据处理过程。QueueProcessor适合于需要对数据进行一个一个地处理的场合。
    QueueBatchUniqueProcessor适合于需要对数据进行分批处理的场合。而且它能够在每批中去除掉重复的数据。
      

  4.   

    如果其他线程没有wait,或者wait中但不依赖这个挂掉的线程notify,那么会其他线程不会停止。如果线程挂掉是因为代码的问题,那么执行相同的代码的线程执行代码时也会挂掉。
      

  5.   

    java线程synchronized同步一定要实现Theard线程或实现Runable接口 后再调用么?
      

  6.   

    LZ要区分synchronized和线程
    继承Theard类或实现Runable接口,是为了使用线程
    而synchronized是为了让线程同步,意思不一样的
    也就是说你用不用Thread或Runable,都可以使用synchronized,即你用不用多线程,都可以使用syncronized来修饰你的方法,以保证线程安全,并不是说使用synchronized就一定要继承Thread或实现Runnable,要区分这些不同的概念。