A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小泉真也 中级黑马   /  2014-1-16 21:12  /  1259 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小泉真也 于 2014-1-16 21:59 编辑
  1. class Test extends Thread
复制代码
Q【1】
run()  可不可以换成   method()
只有是run方法保留,才能被  start调用?

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


2 个回复

倒序浏览
(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();
        }

}

回复 使用道具 举报
Q【1】:run方法是Thread类的方法,只有Thread类极其子类才可以调用start方法,所以如果一个类中没有run方法,它是无法成功称为Thread类的子类的,也就不能调用start方法了。

Q【2】:只要有一个线程出现异常,整个程序就会停止,没出现异常的线程有可能运行了一半,也有可能运行完了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马