多线程--Thread和Runnable区别

2024-08-26 02:38

本文主要是介绍多线程--Thread和Runnable区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  线程的创建有两种方式,分别是继承Thread类和实现Runnable接口,那么这两种方式有什么相同点,以及区别在何处呢?

  首先通过两个实例还看一下他们的相同之处:

  实例1:使用继承Thread类

   创建子类MultiExtendThread:    

public class MultiExtendThread extends Thread {private   int ticket = 10;//每个线程拥有10张票private String name;MultiThread3(String name) {this.name = name;}public void run() {while (ticket > 0) {System.out.println(ticket-- + " is saled by " + name);}}
}
   测试类:     

 public static void main(String[] args) {MultiExtendThread m1 = new MultiExtendThread ("Window 1");MultiExtendThread m2 = new MultiExtendThread ("Window 2");MultiExtendThread m3 = new MultiExtendThread ("Window 3");//创建3个线程Thread t1 = new Thread(m1 );Thread t2 = new Thread(m2);Thread t3 = new Thread(m3);t1.start();t2.start();t3.start();}
   测试结果:以多线程的形式各自打印出售票信息,每个线程分别打印10条记录,如下:

                 


  实例2:使用实现Runnable接口方式

    实现Runnable接口的类:      

public class MultiThread1 implements Runnable {private int ticket = 10;//每个线程都拥有10张票private String name;MultiThread1(String name) {this.name = name;}public void run() {while (ticket > 0) {System.out.println(ticket-- + " is saled by " + name);}}
   测试类:      

public static void main(String[] args) {MultiThread1 m1 = new MultiThread1("Window 1");MultiThread1 m2 = new MultiThread1("Window 2");MultiThread1 m3 = new MultiThread1("Window 3");//创建3个线程Thread t1 = new Thread(m1 );Thread t2 = new Thread(m2);Thread t3 = new Thread(m3);t1.start();t2.start();t3.start();}
   测试结果同实例1

   通过以上两个实例,来看一下两者的相同之处:

     都可以保证新建线程彼此相互独立,各自拥有资源,互补干扰。在这样的场景先,无论使用哪种形式都可以。

   不同之处:

     java的一个特性是仅支持单继承,这样如果是通过继承Thread来实现多线程时,该类将无法再扩展其他的类,不能实现负责的功能。而使用实现Runnable接口时,同样还可以实现其他的接口,这样就避免单继承所带来的局限。还有一点是,实现Runnable接口创建的线程还可以处理同一资源,实现资源的共享。

  实例3:多个售票窗口可以共同售10张票   

public class MultiThread2 implements Runnable {private int ticket = 10;@Overridepublic void run() {while (ticket > 0) {System.out.println(ticket-- + " is saled by " + Thread.currentThread().getName());}}
}
  测试类:     

public static void main(String[] args) {//创建一个实例MultiThread2 m = new MultiThread2();//创建三个线程,三个线程共同拥有同一个实例Thread t1 = new Thread(m, "Window 1");Thread t2 = new Thread(m, "Window 2");Thread t3 = new Thread(m, "Window 3");t1.start();t2.start();t3.start();}
   实例结果:

     


 总结:

 采用继承Thread类方式:
 (1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
 (2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
 采用实现Runnable接口方式:
 (1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况。
 (2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

这篇关于多线程--Thread和Runnable区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107318

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

解读@ConfigurationProperties和@value的区别

《解读@ConfigurationProperties和@value的区别》:本文主要介绍@ConfigurationProperties和@value的区别及说明,具有很好的参考价值,希望对大家... 目录1. 功能对比2. 使用场景对比@ConfigurationProperties@Value3. 核

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实