多线程同步时其中一个线程出异常其它线程会不会继续执行? 多线程同步时其中一个线程出异常其它线程会不会继续执行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程代码中产生异常的话,那么这个线程的生命周期就结束了,这种情况称为线程泄漏。注意,只是这个线程的生命结束了,但其他的线程还是活着的。如果是代码有 BUG,那其他线程走到这一块估计也会挂掉的。 会继续执行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(); }} 线程与线程之间除非你刻意安排,否则是无关的。也就是说,线程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适合于需要对数据进行分批处理的场合。而且它能够在每批中去除掉重复的数据。 如果其他线程没有wait,或者wait中但不依赖这个挂掉的线程notify,那么会其他线程不会停止。如果线程挂掉是因为代码的问题,那么执行相同的代码的线程执行代码时也会挂掉。 java线程synchronized同步一定要实现Theard线程或实现Runable接口 后再调用么? LZ要区分synchronized和线程继承Theard类或实现Runable接口,是为了使用线程而synchronized是为了让线程同步,意思不一样的也就是说你用不用Thread或Runable,都可以使用synchronized,即你用不用多线程,都可以使用syncronized来修饰你的方法,以保证线程安全,并不是说使用synchronized就一定要继承Thread或实现Runnable,要区分这些不同的概念。 java io文本追写问题 Spring aop的问题 [求教]对字符串S进行加密,其加密规则是每一个字符的 ASCⅡ 码值加字符所在位置 急急急!!! tomcat中用jdbc连接mysql老是找不到驱动,请教什么问题 CXF WebService 如何实现GZIP压缩数据 weblogic群集问题 倾囊索书,成心感天,希望也感动您。 调用webservice怎么加入一个soap头 Weblogic受管服务器起动时有错,请问如何解决? java 中的rs关闭的问题 关于myecliplse db brower的配置 急等! Myeclipse安装SVN插件的问题,不要说我笨,你来看看!
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();
}}
1. 创建你自己的处理实现类,继承QueueProcessor或者QueueBatchUniqueProcessor,实现其中的process()方法。
2. 用BlockingQueue的实例来存放待处理的数据
3. 对于你自己的处理实现类,创建足够多的实例。每个实例都会有一个对应的工作线程在需要的时候被创
建。
4. 创建一个QueueConsumerGroup的实例来管理和控制整个多线程数据处理过程。QueueProcessor适合于需要对数据进行一个一个地处理的场合。
QueueBatchUniqueProcessor适合于需要对数据进行分批处理的场合。而且它能够在每批中去除掉重复的数据。
继承Theard类或实现Runable接口,是为了使用线程
而synchronized是为了让线程同步,意思不一样的
也就是说你用不用Thread或Runable,都可以使用synchronized,即你用不用多线程,都可以使用syncronized来修饰你的方法,以保证线程安全,并不是说使用synchronized就一定要继承Thread或实现Runnable,要区分这些不同的概念。