Thread 和Runnable的区别

Thread 和Runnable 的区别

Thread类

在java中可有两种方法实现度线程,一种是继承Thread类,一种是实现Runnable接口。Thread类是在java.lang包中定义的。一个类只要继承了Thread类,并覆写了本类的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这就是此方法的局限性。

但是,此时结果很有规律,先是第一个对象执行,然后第二个对象执行,并没有相互运行。在JDK的文档中可以发现,一旦调用start()方法。下面启动start()方法启动线程。

可以看到程序正常完成了交互式运行,为什么非要使用start()方法启动多线程?

在JDK的安装路径下,src.zip是全部的java资源,通过此代码找到Thread中的start()方法的定义,可以发现此方法中使用了private  native void start();其中native关键字表示可以调用操作系统的底层函数,,那么这样的技术称之为JNI(java Native Interface)

Runnable接口

在实际开发中,一个多线程的操作很少使用Thread类,而是通过Runnable接口完成。

但在使用Runnable定义的子类中没有start()方法,只有在Thread类中才有。此时观察Thread类,有一个构造方法:public Thread(Runnable targer)此构造方法接受了Runnable子类实例,也就是说可以通过Thread类来启动Runnable实现多线程。(start()可以协调系统资源。

两种实现方式的区别和联系

在程序开发中制药是多线程肯定永远是实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处:

- 避免点继承的局限,一个类可以实现多个接口

- 适合于资源的共享

以卖票程序为例,通过Thread类完成

如果用Runnable就可以实现资源共享,

虽然现在程序中有三个线程,但是一共卖出了10张票,也就是说使用Runnable实现多线程可以达到资源共享的目的。

Runnable接口和Thread类之间的联系

public class Thread extends Object implements Runnable

发现Thread类也是Runnable接口的子类。

l

时间: 2024-10-18 08:55:40

Thread 和Runnable的区别的相关文章

多线程——Thread与Runnable的区别

首先,从使用形式上,使用Runnable实现多线程更好,因为避免了单继承问题,但除了这一点之外,Thread和Runnable之间也存在一些联系.观察Thread类的定义形式: public class Threadextends Objectimplements Runnable 原来Thread类是Runnable接口的子类,那么Thread类也应该覆写了run()方法. @Override public void run() { if (target != null) { target.r

java线程-Thread和Runnable的区别

进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小. 线程和进程一样分为五个阶段:创建.就绪.运行.阻塞.终止. 多进程是指操作系统能同时运行多个任务(程序). 多线程是指在同一程序中有多个顺序流在执行 在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. Thread类是在java.lang包

并发编程之多线程基础-Thread和Runnable的区别及联系(二)

上篇文章讲述了创建线程的常用方式 本篇主要分析一下Thread和Runnable两种方式创建线程的区别及联系 联系: ?Thread类实现了Runable接口. ?都需要重写里面Run方法. 区别: ?Thread方式不支持多继承,Runnable方式支持多个实现 ?Runnable更容易实现资源共享,能多个线程同时处理一个资源. 疑惑分享: 本人在理解他们区别的时候 考虑到Thread类本身就是Runnable的实现类 所以产生了一个疑惑:- 为什么Runnable可以实现共享而Thread却

Thread 和 Runnable 的区别

在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口: Thread类是在java.lang包中定义 的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了, 但是一个类只能继承一个父类,这是此方法的局限. 但是,此时结果很有规律,先第一个对象执行,然后第二个对象执行,并没有相互运行.在JDK的文档中可以发现,一旦调用start()方法,则会通过JVM找到run()方法.下面启动start()方法启动线程: 这样程序可以正

Thread和Runnable的区别

1.  首先是使用上的区别,先看代码: class MyThread extends Thread { @Override public void run() { System.out.println("do things"); } } class MyRunnable implements Runnable { @Override public void run() { System.out.println("do things"); } } 可以看到使用Thre

Java 中Thread 和Runnable的区别

转:http://blog.csdn.net/wwww1988600/article/details/7309070 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限. 两种实现方式的区别和联系:    在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现

Java并发实现一(并发的实现之Thread和Runnable的区别)

package com.subject01; public class ThreadOrRunnable { public static void main(String[] args) { System.out.println("Thread输出内容:"); // 三个线程为三个不同的对象资源,资源无法得到共享.由于不是同一个对象,所以也不会存在线程安全的问题 new ThreadDemo().start(); new ThreadDemo().start(); new Thread

Thread与Runnable的区别

开始学线程的时候总会写一些简单的小程序,例如:4个窗口卖20张票. 当然用Thread实现类和Runnable实现类都能实现,但是两者是有异同的: 前者在开启线程的时候还会新开启一个自身的任务,所以用Thread子类创建的线程,会是各个线程交替去执行自己的任务,而非共同执行一条任务. 后者只会创建一个任务,让多个线程去执行一个任务. 平时一般用Runnable声明线程. 继承Runnable public class SaleTicketsOfRunnable { public static v

Java中的Thread与Runnable的区别

1.thread不能设置共享资源.runnable可以设置共享资源 2.代码风格与结构,ruannbale更好些 3. public class TestThread extends Thread { private int count = 5; @Override public void run() { for(int i=0; i<10; i++) { if(this.count>0) { System.out.println(Thread.currentThread().getName