大家都知道多线程可以通过两种方式来创建。
一、通过继承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无法资源共享,这个说法值得再推敲。。
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无法资源共享,这个说法值得再推敲。。
发表评论
-
java设计模式
2012-04-20 16:45 1245一、什么是软件设计模式? 设计模式:是一套被反复使用、多数 ... -
I/O流与文件
2012-02-06 15:22 842I/O流 字节输入流:InputStream类为所有 ... -
多线程
2012-02-06 15:23 758多线程: 进程与线程: 进程:同一个操作系统中 ... -
布局管理器与事件处理
2012-02-06 15:23 891图形界面: 布局管 ... -
异常与图形界面
2012-02-06 15:23 707异常: 异常的分类 ... -
反射与内部类
2012-02-06 15:24 1031反射: 反射:在运行时动态分析或使用一个类进行工作。 ... -
java集合框架
2012-03-26 19:33 884集合:保存多个其他对象的对象,不能保存简单类型 Li ... -
抽象类与接口
2012-02-05 19:17 738修饰符abstract:抽象 ... -
关键字
2012-02-05 19:14 682修饰符static: 把对 ... -
类与对象
2012-02-05 19:13 690类和对象: 类:主观抽象,是对象的模板,可以实例化对 ... -
java环境配置与基本概念
2012-02-05 19:11 658配置java环境变量: JAVA_HOME:配置JD ... -
运算符、流程控制以及数组
2012-02-05 19:09 805局部变量:不是声明 ... -
登陆界面的开发
2012-01-08 17:36 792在开发登陆界面的前面,我们先须要熟悉和熟练构造方法,构造方法 ... -
类与对象
2012-01-08 16:54 769什么是面向对象的编程? OOP:1、在程序中模拟现实世界中的 ... -
类与对象
2012-01-08 16:50 754什么是面向对象的编程? OOP:1、在程序中模拟现实世界中的 ... -
java中能当做基本数据类型的类String
2012-01-08 15:47 775String是java中的一个类,而不是一种基 ... -
java虚拟机与java跨平台运行的关系
2012-01-08 15:24 10051、现写一个简单的java小程序 publicv cl ... -
java中的关键字
2011-11-19 23:45 812最近系统的学习了java的关键字,我才发现原来不知 ... -
与java第一次亲密的接触
2011-11-01 21:58 773刚开始学JAVA时,只知道不停的看书。从 ...
相关推荐
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 ...
参考文献中列出了多篇与ThreadX操作系统相关的研究文献,这些文献从不同角度对ThreadX进行了深入的研究和分析。例如,Lamie EL的文献《嵌入式实时操作系统的多线程计算:基于THREADX和ARM》详细讨论了ThreadX在ARM...
RTthread是一个实时操作系统,这个示例结合了RTthread和FM33LE0的低功耗特性,展示了如何在操作系统环境下控制LED闪烁并在深度睡眠后恢复。 7. **SVD 电源查询**: 电源查询示例,用于监测系统电压状态,帮助...
System.out.println("Activity-->"+ Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread...
RTThreadSTM32标准库参考工程是一个专门为基于STM32微控制器的实时操作系统(RTOS)RT-Thread设计的示例项目。RT-Thread是一个开源、轻量级且功能强大的RTOS,广泛应用于物联网(IoT)设备和嵌入式系统。这个压缩包...
"rt-thread-3.1.3" 是该操作系统的特定版本,代表着该版本在功能和性能上的优化与改进。 RT-Thread Nano是RT-Thread的一个精简版,它专注于提供基础的实时内核服务,如线程管理、内存管理和信号量机制。在"rtthread...
RT-Thread是一款由中国开源社区贡献的物联网操作系统,它具备极强的可伸缩性。可伸缩性体现在其核心可以在最小的ARMCortex-M0微控制器上运行,到中等规模的ARMCortex-M3/M4/M7系统,以及更高性能的MIPS32和ARMCortex...
RT Thread是一款轻量级、高性能、组件丰富的实时操作系统(RTOS),尤其适合于嵌入式系统。这个压缩包中包含的“5,RT Thread操作系统教程及资料(第三方合作伙伴)”很可能是由RT Thread社区或者合作伙伴提供的学习...
开发者可以通过`rt_thread_create`创建任务,`rt_thread_startup`启动任务,`rt_thread_delete`删除任务,以及`rt_thread_suspend`和`rt_thread_resume`控制任务的挂起与恢复。 2. **同步机制**:在多任务环境中,...
* 作为一款国产嵌入式操作系统,与其他 RTOS 的主要区别是:RT-Thread 自创建之初的定位就不仅是一个 RTOS 内核,而是包含网络、文件系统、GUI 界面等组件的中间件平台 * 高度稳定可靠,广泛应用于安防、医疗、新...
与传统的RTOS相比,ThreadX具有更高的通用性和易用性,尤其适合应用于RISC(Reduced Instruction Set Computer,精简指令集计算机)和DSP(Digital Signal Processing,数字信号处理)架构的小型微控制器中。...
最后,一旦我们确认线程`oThread`正在运行,可能需要进行其他操作,如与线程通信、等待线程结束等。`oThread.Abort()`方法可以用来强制结束线程,但应谨慎使用,因为它可能导致资源泄露和其他未预期的后果。 ```...
### ThreadX概述与嵌入式实时系统 #### 一、ThreadX简介 ThreadX是一款由ExpressLogic公司开发的高性能实时操作系统(RTOS),主要用于嵌入式系统开发领域。该操作系统以其出色的稳定性和实时性著称,并且具备较高的...
- 编译和链接工程,确保RT-Thread内核与其他代码无冲突,完成基本的系统构建。 5. **RTOS核心概念** - 任务(Task):RTOS中的执行单元,每个任务都有自己的堆栈和优先级。 - 信号量(Semaphore)和互斥锁...
ThreadX是一款嵌入式实时操作系统(RTOS),由Express Logic公司开发。这个"ThreadX5.1 Win32 Demo"是2009年的最新版本,它提供了在Win32平台上运行ThreadX操作系统的演示环境。了解ThreadX对于深入学习嵌入式系统...
### 多线程的Runnable与Thread的区别 在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现...
`Thread`类在`java.lang`包中定义,提供了一系列与线程生命周期管理相关的功能,如`start()`, `join()`, `interrupt()`等。 #### 优缺点 - **优点**:继承`Thread`类可以直接调用`Thread`类的其他方法,如设置线程...
ThreadX Modules动态应用加载用户手册中文版 ThreadX Modules 是一种动态应用加载技术,允许应用程序在运行时加载独立的模块。该技术特别适合Core-based应用程序,能够动态地加载新的功能模块,以满足不断变化的...
1. **RT-thread与其他RTOS的区别是什么?** - RT-thread具有更好的可移植性、可裁剪性和可扩展性,支持多种处理器架构,同时提供了丰富的组件和服务。 2. **如何理解RT-thread的初始化过程?** - 初始化过程通过...