zoukankan      html  css  js  c++  java
  • Java多线程extends Thread和implements Runnable

      大家都知道,要实现Java多线程的两种方式  a:是直接继承Thread类,b:是实现Runnable接口。

    先上代码:  

    a:是直接继承Thread类,

     public class ThreadDemo1 extends Thread {
        public void run(){
            //Thread.currentThread().getName() 和 this.getName()都可以用来获得线程的名称
            System.out.println("线程的名称:"+Thread.currentThread().getName());
        }
        
        public static void main(String[] args) {
            ThreadDemo1 t1 = new ThreadDemo1();//创建第一个线程
            t1.start();//启动线程
            ThreadDemo1 t2 = new ThreadDemo1();//创建第二个线程
            t2.start();//启动线程
        }

    }

    b:是实现Runnable接口。

    public class ThreadDemo2 implements Runnable {
        public void run(){
            //Thread.currentThread().getName() 和 this.getName()都可以用来获得线程的名称
            System.out.println("线程的名称:"+Thread.currentThread().getName());
        }
        
        public static void main(String[] args) {
            ThreadDemo2  td = new ThreadDemo2();//实例化一个线程
            Thread t1 = new Thread(td);//创建第一个线程
            t1.start();//启动线程
            Thread t2 = new Thread(td);//创建第二个线程
            t2.start();//启动线程
        }

    }

    OK,实现Runnable接口相对于继承Thread类来说,有如下显著的好处:

    (1)适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。

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

    (3)有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程操作相同的数据,与它们的代码无关。当共享访问相同的对象是,即它们共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。

    详细的例子见:http://yuelangyc.iteye.com/blog/1056393

    这两种方法比较:

    实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。因此,几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。

    另外:在记一个小知识点:Thread.currentThread().getName() 和 this.getName()详解

  • 相关阅读:
    ASM认证与口令文件
    asm 兼容性、asm 主要参数管理
    最常见的5个导致 RAC 实例崩溃的问题
    oracle隐含参数的查看与修改
    三种 Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF
    Oracle RAC TAF 无缝failover
    oracle rac的特征
    安装ORACLE时在Linux上设置内核参数的含义
    关于GCC的理解——On the understanding of the GCC
    java中的闭包和回调
  • 原文地址:https://www.cnblogs.com/wangzn/p/7345086.html
Copyright © 2011-2022 走看看