黑马程序员技术交流社区

标题: 多线程中的run方法可以替换吗? [打印本页]

作者: 小泉真也    时间: 2014-1-16 21:12
标题: 多线程中的run方法可以替换吗?
本帖最后由 小泉真也 于 2014-1-16 21:59 编辑
  1. class Test extends Thread
复制代码
Q【1】
run()  可不可以换成   method()
只有是run方法保留,才能被  start调用?

Q【2】补充问题
前面自学,接触了一下  异常。既然主线程和另外的一个可以看作是同时进行,
那如果线程中的其中一个线程导入异常,却没有处理异常,发生错误;那另外一个线程是正确的。
运行结果是两个线程都无法继续,还是一个停止一个继续?



作者: 月生春    时间: 2014-1-16 21:25
(1)run方法是线程执行时的方法,start是启动线程的方法,直接调用run方法不会以多线程的方式运行,必须调用start才能以多线程的方式运行.再说了,我们只有复写run方法,才在在多线程中写入自己定义的多线程运行代码
(2)线程代码中产生异常的话,那么这个线程的生命周期就结束了,这种情况称为线程泄漏。

注意,只是这个线程的生命结束了,但其他的线程还是活着的。如果是代码有 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();
        }

}


作者: 够了没有    时间: 2014-1-16 21:42
Q【1】:run方法是Thread类的方法,只有Thread类极其子类才可以调用start方法,所以如果一个类中没有run方法,它是无法成功称为Thread类的子类的,也就不能调用start方法了。

Q【2】:只要有一个线程出现异常,整个程序就会停止,没出现异常的线程有可能运行了一半,也有可能运行完了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2