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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王_强 中级黑马   /  2013-3-30 23:21  /  1648 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程的实现我知道有两种,但是这两种方式有什么区别呢? 谁能详解下,最好有例子?

2 个回复

倒序浏览
本帖最后由 苏冉 于 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: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接口是最合适的。

这是自己自学时做的笔记

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马