多线程——继承Thread 类和实现Runnable 接口的区别

  java中我们想要实现多线程常用的有两种方法,继承Thread 类和实现Runnable 接口,有经验的程序员都会选择实现Runnable接口 ,其主要原因有以下两点:

  首先,java只能单继承,因此如果是采用继承Thread的方法,那么在以后进行代码重构的时候可能会遇到问题,因为你无法继承别的类了。

  其次,如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

  通过下面的实例可以清晰的看出两种方式的区别所在。

1.继承Thread 类

package test;
/**
 * 继承thread类
 * @author hongxin
 *
 */
public class testThread extends Thread{
	private int count=5;
	private String name;
    public testThread(String name) {
       this.name=name;
    }
	public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(name + "运行  count= " + count--);
            try {
                sleep((int) Math.random() * 10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

	}
}
package test;

public class main1 {
	public static void main(String[] args) {
		testThread mTh1=new testThread("A");
		testThread mTh2=new testThread("B");
		mTh1.start();
		mTh2.start();
	}
}

运行结果

代码分析

  线程1和线程2之间的变量是不能共享的,每次count--都有各自的变量和结果。

2.Runnable 接口

package test;

/**
 * 实现runnable接口
 * @author hongxin
 *
 */
public class testRunnable implements Runnable{
    private int count=15;
	@Override
	public void run() {
		  for (int i = 0; i < 5; i++) {
			  System.out.println(Thread.currentThread().getName() + "运行  count= " + count--);
	            try {
	            	Thread.sleep((int) Math.random() * 10);
	            } catch (InterruptedException e) {
	                e.printStackTrace();
	            }
	        }
	}

}
package test;

public class main2 {
	public static void main(String[] args) {
		testRunnable mTh = new testRunnable();
	        new Thread(mTh, "C").start();//同一个mTh,但是在Thread中就不可以,如果用同一个实例化对象mt,就会出现异常
	        new Thread(mTh, "D").start();
	        new Thread(mTh, "E").start();
	}

}

运行结果

代码分析

  三个不同的线程之间的变量是共享的,每次count--得到的记过都是再上一个线程运行结果之上得到的。

时间: 2024-10-06 17:17:14

多线程——继承Thread 类和实现Runnable 接口的区别的相关文章

Java 继承Thread类和实现Runnable接口的区别

ava中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类     在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程.当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看一下这两种方式实现的两种结果. public class TheadDemo extends Thread{ private

java实现多线程的两种方式继承Thread类和实现Runnable接口的方法_java

实现方式和继承方式有什么区别呢? *区别: *继承Thread:线程代码存放在Thread子类run方法中 *实现Runnable:线程代码存放在接口的子类的run方法中 *实现方式的好处:避免了单继承的局限性 *在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程 *注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws *Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchroniz

Java多线程继承Thread类详解第1/2页_java

调用方法: /** * 点击量/月(年)Thread */ public void yearlyClickThread() { // 获取参数 String year = getPara("year"); // 统计数据集X List<String> xList = new ArrayList<String>(); xList.add("January"); xList.add("February"); xList.add

servlet runnable-继承了httpservlet类并实现runnable接口 那么程序入口是什么

问题描述 继承了httpservlet类并实现runnable接口 那么程序入口是什么 继承了httpservlet类并实现runnable接口 那么程序入口是什么? 是servlet的init();方法 还是实现多线程时的run():方法??? 解决方案 那要看你怎么用了,是作为servlet呢还是一个任务,前者需要配置,由容器实例化的;后者就是可以作为一个任务来执行,需要自己实例化,这样就是一个普通的任务了.

Java 多线程的Thread类和Runnable接口

  Thread 类 Thread 类是一个具体的类,即不是抽象类,该类封装了线程的行为.要创建一个线程,程序员必须创建一个从 Thread 类导出的新类.程序员必须覆盖 Thread 的 run() 函数来完成有用的工作.用户并不直接调用此函数:而是必须调用 Thread 的 start() 函数,该函数再调用 run().下面的代码说明了它的用法: 创建两个新线程 import java.util.*; class TimePrinter extends Thread { int pause

Java多线程--认识多线程(Thread、Runnable)

1.进程与线程 dos系统:单进程.只能有一个程序独自运行,其他程序无法运行. windows系统:多进程.同一时间段上有多个程序同时运行. 2.java的多线程实现 在java中实现多线程可以采用两种方式: 继承Thread类. 实现Runnable接口. 3.Thread类 java.lang包会在程序运行时自动导入,所以不用编写import语句. class MyThread extends Thread{ // 继承Thread类,作为线程的实现类 private String name

java多线程编程之使用thread类创建线程_java

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下: 复制代码 代码如下: public Thread( );public Thread(Runnable target);public Thread(String name);public Thread(Ru

Java多线程初学者指南(2):用Thread类创建线程

在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下: public Thread( ); public Thread(Runnable target); public Thread(String name); public Thread(Runnable t

Java并发编程:Thread类的使用

在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换,然后接着介绍Thread类中的方法的具体使用. 以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 若有不正之处,请多多谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接:   http://www.cnblogs.com/dolphin0520/p/3920357