黑马程序员技术交流社区

标题: java中创建线程的两种方式有什么区别? [打印本页]

作者: 荣天    时间: 2012-5-13 11:31
标题: java中创建线程的两种方式有什么区别?
java中创建线程的两种方式有什么区别
作者: 刘克方    时间: 2012-5-13 11:37
使用Runnable接口创建线程

1.可以将CPU,代码和数据分开,形成清晰的模型

2.线程体run()方法所在的类可以从其它类中继承一些有用的属性和方法

3.有利于保持程序的设计风格一致

  直接继承Thread类创建对象

1.Thread子类无法再从其它类继承(java语言单继承)。

2.编写简单,run()方法的当前对象就是线程对象,可直接操作。
在实际应用中,几乎都采取第一种方式
作者: 马浩    时间: 2012-5-13 11:51
1、继承Thread类创建线程的方法,在继承了Thread类之后,不能再继承其他的方法,(在java中支持单继承),这样灵活性就不如实现Runnable接口来创建线程的方法了;

2、使用实现Runnable接口来创建线程可以达到资源共享!(继承Thread类创建线程也可以实现资源共享,但是比较的麻烦。)

在我们创建线程的时候都会优先采用实现Runnable接口的方法。


作者: 赵文杰    时间: 2012-5-13 22:28
*** 一.创建线程
        1.继承Thread类
                定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中
                创建该类对象, 调用start()方法就可以开启一条新线程, 新线程中自动指定run()方法
                  public class ThreadDemo1 {

        public static void main(String[] args) {
                // 3.创建线程对象
                MyThread mt = new MyThread();
               
                // 4.启动一条新线程, 新线程上自动执行run()方法
                mt.start();
               
                // 5.主线程循环打印
                for (int i = 0; i < 100; i++)
                        System.out.println("A " + i);
        }

}

// 1.定义类继承Thread
class MyThread extends Thread {
       
        // 2.重写run方法
        public void run() {
                for (int i = 0; i < 100; i++)
                        System.out.println("B " + i);
        }
       
}
        2.实现Runnable接口
                定义类实现Runnable接口, 重写run()方法, 将线程中要执行的代码写在run()方法中
                创建该类对象, 创建Thread类对象, 将Runnable对象传入Thread的构造函数中
                调用Thread对象的start()方法就可以开启一条新线程, 新线程中执行Runnable的run()方法
           public class ThreadDemo2 {

        public static void main(String[] args) {
                // 3.创建Runnable对象
                MyRunnable mr = new MyRunnable();
               
                // 4.创建Thread对象, 在构造函数中传入Runnable对象
                Thread t = new Thread(mr);
               
                // 5.调用start()开启新线程, 新线程自动执行Runnable的run()方法
                t.start();
               
                // 6.主线程循环打印
                for (int i = 0; i < 100; i++)
                        System.out.println("A " + i);
        }

}

// 1.定义类, 实现Runnable接口
class MyRunnable implements Runnable {
       
        // 2.实现run()方法
        public void run(){
                for (int i = 0; i < 100; i++)
                        System.out.println("B " + i);
        }
}
作者: 杨静    时间: 2012-5-14 01:24
java中是单继承,你若是从Thread类继承的话(在子类中重写run方法),就不能继承其他的类了,而且多条线程之间无法共享线程类的实例变量。
但是实现Runnable接口(在实现类中重写接口的run方法)同时还可以继承其他类,在这种方式下可以多个线程共享同一个target对象,适合多个相同线程处理同一份资源,从而使得CPU、代码和数据分开,形成清晰地模型,较好地体现了面向对象的思想。
作者: 荣天    时间: 2012-5-14 08:13
赵文杰 发表于 2012-5-13 22:28
*** 一.创建线程
        1.继承Thread类
                定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法 ...

谢 谢朋友:)




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