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()详解

时间: 2024-08-07 04:34:01

Java多线程extends Thread和implements Runnable的相关文章

Java 多线程之 Thread 类 和 Runnable 接口初步使用

Thread 类 Thread 类是在 JDK1.0 时就存在的, 在 Java 中接触的多线程开发基本上都会从这个类开始. Thread之定义线程类 使用 Thread 创建线程的方法很简单, Thread 是一个类, 在需要创建线程时, 我们只需要继承这个类, 并将 run() 方法进行重写即可. class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = min

java 多线程 继承Thread和实现Runnable的区别

1)继承Thread: public class ThreadTest extends Thread { private int count; private String name; public ThreadTest(int count,String name){ this.count = count; this.name = name; } public void run() { while(count>0) { System.out.println(name+"买票 "+

Java 多线程(1)-Thread和Runnable

一提到Java多线程,首先想到的是Thread继承和Runnable的接口实现 Thread继承 public class MyThread extends Thread { public void run(){ int i = 0; System.out.println("--------------"+i++); } } Runnable接口实现 public class RunnableImpl implements Runnable { private long value =

java多线程创建-Thread,Runnable,callable和threadpool

java创建多线程的方式有许多种,这里简要做个梳理 1. 继承Thread类 继承java.lang.Thread类,创建本地多线程的类,重载run()方法,调用Thread的方法启动线程.示例代码如下: MyThread.java public class MyThread extends Thread { public void run(){ private int copy = 0; System.out.println("Thread id:" + Thread.current

Java多线程之 Thread VS Runnable 【带案例】

为此,我们举个例子,假设有火车站有三个窗口,在卖火车票,总共只有5张票.每一个线程相当于一个窗口,分别售票 <strong>package com.thread; class myThread extends Thread{ private int ticketsCount=5;//一种有5张票 private String name;//窗口,也即是线程的名字 public myThread(String name){ this.name=name; } @Override public v

Java多线程01(Thread类、线程创建、线程池)

Java多线程(Thread类.线程创建.线程池) 第一章 多线程 1.1 多线程介绍 1.1.1 基本概念 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 1.1.2 单线程程序 - 从入口m

线程的实现方法以及区别 extends Thread、implements Runable

/** 线程存在于进程当中,进程由系统创建. 创建新的执行线程有两种方法 注意: 线程复写run方法,然后用start()方法调用,其实就是调用的run()方法,只是如果直接启动run()方法, 那么就会出现线程调用结束后再执行主函数的情况.另一种情况是用start()说多线程都在抢夺执行权,要明确的是:某一时刻,只能 有一个程序在执行,多核除外. 同时注意线程优先级用0-5表示 1.Real-time:实时 2.High:高 3.Above normal:高于标准 4.Normal:标准 5.

Java多线程实现2,实现Runnable接口

Java 程序只允许单一继承,即一个子类只能有一个父类.所以在Java中如果一个类继承了某一个类,同时又想采用多线程技术的时,就不能用继承Thread类的方式产生线程了,因为Java不允许多继承.这时就要用Runnable接口来创建线程了.采用实现Runnable接口方式实现多线程的大致步骤如下: 定义一个新的类实现Runnable接口,假设此类名为TestThread. 在TestThread类中实现run()方法,此方法即为新线程的运行程序代码. 创建TestThread类的对象t1,再以t

Java 多线程 (Thread 类)

1.多线程 1.多线程实现 两种方式可以实现多线程: 继承 Thread 类,重写 run 方法:定义对象,调用 start 方法 创建类实现 Runnable 接口,作为实参传递给 thread 的构造方法.定义对象,调用 start 方法. 1.1.继承 Thread 继承类,重写方法 class TDemo1 extends Thread { public String name; // 取个名字,便于识别 public TDemo1 (String name) { // 构造方法 thi