`
剑锋无刃
  • 浏览: 33811 次
  • 性别: Icon_minigender_1
  • 来自: 长沙市
最近访客 更多访客>>
社区版块
存档分类
最新评论

Thread 与Runnab le区别

    博客分类:
  • java
阅读更多

大家都知道多线程可以通过两种方式来创建。

一、通过继承Thread类

二、通过实现Runnable接口

那么中两种方式到底有什么区别呢?那种方式更好些呢?

我们使用多线程,无非就是想利用多线程的优点,来更好的实现我们的想法。

多线程有哪些优点呢?

一、多线程共享同一块内存空间和一组系统资源

二、线程本身的数据通常都是只有微处理器的寄存器数据,以及供程序执行的堆栈。所以系统在产生一个线程或者线程的切换要比进程系统的负担小很多。

现在我们来了解一些Thread类。

public class ThreadDemo

{
	public static void main(String []args)
	{
		ThreadTest t=new ThreadTest();
		t.start();
		t.start();
		t.start();
		t.start();
	}
}
class ThreadTest extends Thread
{
	private int count=10;
	public void run()
	{
		while(count>0)
		{
			System.out.println(Thread.currentThread().getName()+"   "+count--);
		}
	}
}

 

运行后,我们发现其实只启动了一个线程。

是不是程序有问题呢?我们修改一下程序。

 

public  class ThreadDemo
{
	public static void main(String []args)
	{
		new ThreadTest().start();
		new ThreadTest().start();
		new ThreadTest().start();
		new ThreadTest().start();
	}
}
class ThreadTest extends Thread
{
	private int count=10;
	public void run()
	{
		while(count>0)
		{
			System.out.println(Thread.currentThread().getName()+"   "+count--);
		}
	}
}

 再次运行,发现这四个线程对象各自占有各自的资源,并不是同时完成统一任务。

我们可以得出结论:Thread类实际上无法达到资源共享的目的。

那么,Runnable接口能不能达到这一目的呢?

我们大可试一下。

 

public  class ThreadDemo
{
	public static void main(String []args)
	{
		ThreadTest test=new ThreadTest();
		new Thread(test).start();
		new Thread(test).start();
		new Thread(test).start();
		new Thread(test).start();
	}
}
class ThreadTest implements Runnable
{
	private int count=10;
	public void run()
	{
		while(count>0)
		{
			System.out.println(Thread.currentThread().getName()+"   "+count--);
		}
	}
}

 运行之后我们发现,这四个线程同时完成了我们需要完成的任务。

通过以上比较我们即可得出Thread与Runnable的区别:

1、Runnable适合于多个相同程序代码线程去处理统一资源的情况,把虚拟的cpu(线程)同程序的代码,数据有效分离,较好体现面向对象的编程的思想

2、Runnable可以避免由于java的单继承机制带来的局限。可以再继承其他类的同时,还能实现多线程的功能。

3、Runnable能增加程序的健壮性。代码能够被多个线程共享。

分享到:
评论
1 楼 YorkTsai 2013-10-23  
对Thread的测试,修改成这样  

public  class ThreadDemo 
    { 
        public static void main(String []args) 
        {  ThreadTest tt = new ThreadTest();
            new Thread(tt).start(); 
            new Thread(tt).start(); 
            new Thread(tt).start(); 
            new Thread(tt).start(); 
        } 
    } 
    class ThreadTest extends Thread 
    { 
        private int count=10; 
        public void run() 
        { 
            while(count>0) 
            { 
                System.out.println(Thread.currentThread().getName()+"   "+count--); 
            } 
        } 
    } 

也可以达到Runnable的资源共享的目的,
所以,认为Thread无法资源共享,这个说法值得再推敲。。

相关推荐

    rt-thread nano 适配 新塘M031LE3AE keil 工程

    1. **下载与安装**:首先,你需要从rt-thread官网下载rt-thread nano 的源码包,并安装Keil μVision IDE,确保版本支持目标芯片M031LE3AE。 2. **创建工程**:在Keil中新建一个工程,选择新塘M031LE3AE对应的芯片...

    thread thread thread thread

    thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread ...

    实时操作系统ThreadX剖析

    参考文献中列出了多篇与ThreadX操作系统相关的研究文献,这些文献从不同角度对ThreadX进行了深入的研究和分析。例如,Lamie EL的文献《嵌入式实时操作系统的多线程计算:基于THREADX和ARM》详细讨论了ThreadX在ARM...

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    System.out.println("Activity-->"+ Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread...

    复旦微 FM33LE0源码例程

    RTthread是一个实时操作系统,这个示例结合了RTthread和FM33LE0的低功耗特性,展示了如何在操作系统环境下控制LED闪烁并在深度睡眠后恢复。 7. **SVD 电源查询**: 电源查询示例,用于监测系统电压状态,帮助...

    RT-Thread中文文档

    RT-Thread是一款由中国开源社区贡献的物联网操作系统,它具备极强的可伸缩性。可伸缩性体现在其核心可以在最小的ARMCortex-M0微控制器上运行,到中等规模的ARMCortex-M3/M4/M7系统,以及更高性能的MIPS32和ARMCortex...

    RTThread Stm32 标准库参考工程.zip_RT-Thread STD库_rtos stm32_rtthread_rt

    RTThreadSTM32标准库参考工程是一个专门为基于STM32微控制器的实时操作系统(RTOS)RT-Thread设计的示例项目。RT-Thread是一个开源、轻量级且功能强大的RTOS,广泛应用于物联网(IoT)设备和嵌入式系统。这个压缩包...

    5,RT Thread操作系统教程及资料_rtthread_RT-Thread_

    RT Thread是一款轻量级、高性能、组件丰富的实时操作系统(RTOS),尤其适合于嵌入式系统。这个压缩包中包含的“5,RT Thread操作系统教程及资料(第三方合作伙伴)”很可能是由RT Thread社区或者合作伙伴提供的学习...

    rt-thread入门教程PPT

    * 作为一款国产嵌入式操作系统,与其他 RTOS 的主要区别是:RT-Thread 自创建之初的定位就不仅是一个 RTOS 内核,而是包含网络、文件系统、GUI 界面等组件的中间件平台 * 高度稳定可靠,广泛应用于安防、医疗、新...

    rt-thread-3.1.3_rtthread_RT-Thread_nano_rtthreadopenocd_RT-Threa

    "rt-thread-3.1.3" 是该操作系统的特定版本,代表着该版本在功能和性能上的优化与改进。 RT-Thread Nano是RT-Thread的一个精简版,它专注于提供基础的实时内核服务,如线程管理、内存管理和信号量机制。在"rtthread...

    ThreadX中文学习手册

    与传统的RTOS相比,ThreadX具有更高的通用性和易用性,尤其适合应用于RISC(Reduced Instruction Set Computer,精简指令集计算机)和DSP(Digital Signal Processing,数字信号处理)架构的小型微控制器中。...

    C#多线程之Thread中Thread.IsAlive属性用法分析

    最后,一旦我们确认线程`oThread`正在运行,可能需要进行其他操作,如与线程通信、等待线程结束等。`oThread.Abort()`方法可以用来强制结束线程,但应谨慎使用,因为它可能导致资源泄露和其他未预期的后果。 ```...

    threadx中文资料

    ### ThreadX概述与嵌入式实时系统 #### 一、ThreadX简介 ThreadX是一款由ExpressLogic公司开发的高性能实时操作系统(RTOS),主要用于嵌入式系统开发领域。该操作系统以其出色的稳定性和实时性著称,并且具备较高的...

    RealThread.RT-Thread.3.1.5.zip

    - 编译和链接工程,确保RT-Thread内核与其他代码无冲突,完成基本的系统构建。 5. **RTOS核心概念** - 任务(Task):RTOS中的执行单元,每个任务都有自己的堆栈和优先级。 - 信号量(Semaphore)和互斥锁...

    多线程的Runnable_和thread有什么区别

    ### 多线程的Runnable与Thread的区别 在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现...

    Java中Runnable和Thread的区别

    `Thread`类在`java.lang`包中定义,提供了一系列与线程生命周期管理相关的功能,如`start()`, `join()`, `interrupt()`等。 #### 优缺点 - **优点**:继承`Thread`类可以直接调用`Thread`类的其他方法,如设置线程...

    RT-thread相关介绍与面试问题+答案

    1. **RT-thread与其他RTOS的区别是什么?** - RT-thread具有更好的可移植性、可裁剪性和可扩展性,支持多种处理器架构,同时提供了丰富的组件和服务。 2. **如何理解RT-thread的初始化过程?** - 初始化过程通过...

    ThreadX5.1 Win32 Demo

    ThreadX是一款嵌入式实时操作系统(RTOS),由Express Logic公司开发。这个"ThreadX5.1 Win32 Demo"是2009年的最新版本,它提供了在Win32平台上运行ThreadX操作系统的演示环境。了解ThreadX对于深入学习嵌入式系统...

    2022年RT-Thread全球技术大会国内专场PPT合集(31份).zip

    2022年RT-Thread全球技术大会国内专场PPT合集(31份)。 C RTOS中的RUST应用 CherryUSB协议栈的原理与使用 RISCV指令集开源软件生态 RNDIS设备驱动框架 RT-Thread 电源管理组件 RT-Thread 构建配置系统 RT-Thread ...

    ThreadX Modules动态应用加载用户手册(中文版).pdf

    ThreadX Modules动态应用加载用户手册中文版 ThreadX Modules 是一种动态应用加载技术,允许应用程序在运行时加载独立的模块。该技术特别适合Core-based应用程序,能够动态地加载新的功能模块,以满足不断变化的...

Global site tag (gtag.js) - Google Analytics