黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: 张海洋    时间: 2013-3-22 23:28
标题: 线程问题
本帖最后由 张海洋 于 2013-3-23 19:29 编辑

启动一个线程是用run()还是start()?
作者: 陈腾跃_2013    时间: 2013-3-22 23:30
本帖最后由 陈腾跃_2013 于 2013-3-22 23:34 编辑

按你的意思,是start()!
run()是一个方法,可以在子类中覆盖,在线程启动的时候会调用。

eg:
class Demo extends Thread
{
    //覆盖成自定义方法
    public void run()
    {
        System.out.println("Demo run");
    }
}

class ThreadDemo
{
    public static void main(String[] args)
    {
        Demo d = new Demo();
        d.start();//启动线程调用run方法
    }
}
作者: 彭颖    时间: 2013-3-22 23:35
创建线程一:继承Thread类

步骤:定义类继承Thread。

复写Thread类中的run方法。

目的:将自定义的代码存储在run方法,让线程运行。

调用线程的start方法。

(该方法两个作用:启动线程,调用run方法)


Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码。就是run方法。

也就是说Thread类中的run方法,用于存储线程要运行的代码。
作者: lxww    时间: 2013-3-22 23:40
class ThreadDemo1 {
       
        public static void main(String[] args) {
                MyThread mt = new MyThread();        // 4.创建线程对象
                mt.start();                        // 5.开启新线程, 内部会自动执行run方法
               
                for (int i = 0; i < 1000; i++)
                        System.out.println("A");
        }
               
}

class MyThread extends Thread {                        // 1.定义类继承Thread
        public void run() {                        // 2.重写run方法
                for (int i = 0; i < 1000; i++)        // 3.把新线程要做的事写在run方法中
                        System.out.println("B");
        }
}
作者: 芦子骐    时间: 2013-3-23 01:43
呵呵  这个错误我在刚看完线程的时候就犯过  所有比较深刻   一定要用start  如果用run的话 你只是调用的那个类的run方法 并没有启动线程 那么结果就是:run方法中的代码
只执行一次 或者是循环的话就会执行完再接着从主线程继续往下走
作者: 李辉    时间: 2013-3-23 07:15
start()
作者: Dev_Lzf    时间: 2013-3-23 19:17
启动线程使用start()方法,不能是run()方法。
因为:   调用start()方法启动线程,系统会把该run()方法当成线程执行体来处理;但如果直接调用线程对象的run()方法,则run()方法立即就被执行,而且在run()方法放回之前其他线程无法并发执行,也就是说,系统会把线程对象当成一个普通对象,而run()方法也即是一个普通的方法,而不是线程执行体;例如:
{
//下面两行代码并不会启动两个线程,而是依次执行两个run()方法
//(thread1是一个继承Thread的线程对象)
new thread1().run();
new thread1().run();
}




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