黑马程序员技术交流社区

标题: 多线程求助 [打印本页]

作者: 王_强    时间: 2013-3-30 23:21
标题: 多线程求助
多线程的实现我知道有两种,但是这两种方式有什么区别呢? 谁能详解下,最好有例子?

作者: 苏冉    时间: 2013-3-30 23:31
本帖最后由 苏冉 于 2013-3-30 23:35 编辑

Java有两种实现多线程的方式:
1、直接继承Thread类
2、实现Runnable接口

实现Runnable接口相对于继承Thread类的优点:
(1)适合多个相同程序代码的线程去处理同一资源的情况,体现了面向对象的设计思想。

(2)避免由于Java的单继承特性带来的局限。
当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式。
那么,这个类就只能采用实现Runnable接口的方式了。

(3)有利于程序的健壮性。
当多个线程的执行代码来自同一个类的实例时,称它们共享相同的代码。
多个线程操作相同的数据,与它们的代码无关。
当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。
作者: J_hom    时间: 2013-3-30 23:50
本帖最后由 J_hom 于 2013-3-30 23:52 编辑

java的多线程实现
在java中如果要想实现多线程可以采用以下两种方式:
·继承Thread类
·实现Runable接口
Thread类与Runnable类的深入关系
public class Thread
extends Object
implements Runnable
从Thread的定义格式可以发现,Thread类也是Runnable接口的子类。(public class Thread extends Object implements Runnaable)
使用Thread类在操作多线程的时候无法达到资源共享的目的,而使用Runnable接口实现多线程操作可以实现资源共享。
class MyThread extends Thread{//继承Thread类,作为线程的实现类
        private String name;//表示线程的名称
        public MyThread(String name){
           this.name=name;//通过构造方法配置name属性
        }
        public void run(){
          for(int i=0;i<10;i++){
            System.out.println(name+"运行,i="+i);
          }
        }
};
public class ThreadDemo01{
        public static void main(String args[]){
           MyThread mt=new MyThread("A线程");
           MyThread mt1=new MyThread("B线程");
           //mt.run();//start()方法包含了run()方法,且两种方法运行方式不同run()方法是按顺序启动线程。
           //mt1.run();//start()方法是按照CPU资源启动线程,随机启动的。
           mt.start();
           mt1.start();
        }
}
Runnable接口
class MyThread implements Runnable{//实现Runnable接口,作为线程的实现类
        private String name;//表示线程的名称
        public MyThread(String name){
           this.name=name;//通过构造方法配置name属性
        }
        public void run(){//覆写run()方法,作为线程的操作主体
           for(int i=0;i<10;i++){
              System.out.println(name+"运行,i="+i);
           }
        }
};
public class RunnableDemo01{
        public static void main(String args[]){
                new Thread(new MyThread("线程A")).start();
                new Thread(new MyThread("线程B")).start();
        }
}
实现Runnable接口比继承Thread类有如下的明显优点:
·适合多个相同程序代码的线程去处理同一个资源
·个以避免由于单继承局限所带来的影响
·增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
所以开发中使用Runnable接口是最合适的。

这是自己自学时做的笔记




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