Runnable可以实现资源共享但Thread不能实现资源共享的原因

2023-10-26


转自:http://blog.csdn.net/javaniceyou/article/details/6859305

线程的两种实现方式,通过实现Runnable接口的线程方式可以实现资源的共享,而继承Thread则不可以,原因何在?先看下面两段代码:

通过Thread实现线程:

Java代码  复制代码
  1. //使用Thread实现线程不能实现资源共享 
[java]  view plain copy
  1. //使用Thread实现线程不能实现资源共享  
  2. class MyThread extends Thread  
  3. {     
  4.     private int ticket=5;  
  5.     private String name;  
  6.     public MyThread(String name ){  
  7.         this.name=name;  
  8.     }  
  9.     public void run(){  
  10.         for(int i=0;i<10;i++){  
  11.             if(ticket>5){  
  12.                 System.out.println("线程"+name+"卖票"+i);  
  13.             }  
  14.         }  
  15.       
  16.     }  
  17. }  
  18.   
  19. public class ThreadDemo02  
  20. {  
  21.     public static void main(String args[]){  
  22.         MyThread A = new MyThread("A");    
  23.         MyThread B = new MyThread("B");  
  24.         A.start();  
  25.         B.start();  
  26.     }  
  27. }  

通过Runnable实现:

Java代码  复制代码
  1.  
    [java]  view plain copy
    1. //使用Runnable实现线程可以实现资源共享  
    2. class MyThread implements Runnable  
    3. {  
    4.     private int ticket=5;  
    5.     private String name;  
    6.     public MyThread(String name){  
    7.         this.name=name;  
    8.     }  
    9.     public void run(){  
    10.         for(int i=1;i<=10;i++){  
    11.             if(ticket>0){  
    12.                 System.out.println("线程"+name+"卖票"+(ticket--));  
    13.                 }  
    14.         }  
    15.     }  
    16. }  
    17. public class RunnableDemo02  
    18. {  
    19.     public static void main(String args[]){  
    20.         MyThread A = new MyThread("A");  //实例化线程要执行的任务  
    21.         Thread Ta = new Thread(A);    //实例两个线程对象,实际传递的是一个任务  
    22.         Thread Tb = new Thread(A);    //因为两个线程执行的是一个任务,所以资源是共享的  
    23.         Ta.start();  
    24.         Tb.start();  
    25.     }  
    26. }  

解释:

因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。

一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。

两种不同的线程实现方式本身就决定了其是否能进行资源共享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Runnable可以实现资源共享但Thread不能实现资源共享的原因 的相关文章

  • IDEA查找关键字快捷键,很实用。

    本页面查找关键字快捷键 Ctrl F 查找当前页面关键字 1 第一个向上的箭头 表示关键字跳转到上一个 2 第二个向下的箭头 表示关键字跳转到上一个 其他的各位都可以尝试一下 主要就是当页面有较多关键字时 让你可以更加容易查看 查找所有 S
  • 全面理解java中的构造方法以及this关键字的用法(超详细)

    Hello 各位铁汁们 我是小 儿哈 今天我又来更新我的Java基础学习博客了 本篇主要内容概述 1 如何用构造方法初始化对象 2 为啥要有this这个关键字 3 this 属性名访问成员变量 成员方法 4 this 方法名 this 的用
  • 【JavaSE系列】第八话 —— 继承和它的边角料们

    导航小助手 思维导图 一 引出继承 二 继承的概念 三 继承的语法 四 父类成员访问 4 1 子类中访问父类的成员变量 4 2 子类访问父类的成员方法 五 super 关键字 5 1 super 成员变量 5 2 super 成员方法 5
  • Java 基础进阶篇(十八):正则表达式匹配规则和应用

    文章目录 一 正则表达式概述 二 正则表达式的匹配规则 三 正则表达式在方法中的应用 3 1 校验手机号 邮箱和座机电话号码 3 2 字符串的内容替换和分割 四 编程题目 4 1 表示数值的字符串 4 2 非严格递增连续数字序列 一 正则表
  • Java异常(超详细!)

    1 什么是异常 java提供异常处理机制有什么用 什么是异常 程序执行过程中的不正常情况 异常的作用 增强程序的 健壮性 eg public class ExceptionTest01 public static void main Str
  • JAVA之单元测试:Junit框架

    单元测试 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方法 因此 单元测试就是针对Java方法的测试 进而检查方法的正确性 目前测试方法是怎么进行的 存在什么问题 1 只有一个main方法 如果一个方法的测试失败
  • Java 解析http返回的xml数据

    Java 解析http返回的xml数据 写成txt文件 需求 每小时抓取给定api接口返回的xml数据 把xml数据保存为XML文件 把xml数据转换txt文件格式数据 保存txt文件 文件名以yyyyMMddHH0000 txt和yyyy
  • 日志-Log4J

    日志 程序中的日志可以用来记录程序在运行的时候点点滴滴 并可以进行永久存储 日志和输出语句的区别 输出语句 日志技术 取消日志 需要修改代码 灵活性比较差 不需要修改代码 灵活性比较好 输出位置 只能是控制台 可以将日志信息写入到文件或者数
  • Java语言基础

    01 01 计算机基础知识 计算机概述 了解 A 什么是计算机 计算机在生活中的应用举例 计算机 Computer 全称 电子计算机 俗称电脑 是一种能够按照程序运行 自动 高速处理海量数据的现代化智能电子设备 由硬件和软件所组成 没有安装
  • Java概述

    Java 简介 一个苦逼的建筑专业的Java小白 什么是 Java Java 是一门面向对象编程语言 不仅吸收了 C 语言的各种优点 还摒弃了 C 里难以理解的多继承 指针等概念 因此 Java 语言具有功能强大和简单易用两个特征 Java
  • 包装类自动装箱和拆箱原理

    包装类的自动装箱和自动拆箱 包装类的自动装箱和拆箱是JDK1 5的新特性 一 首先 了解自动装箱的过程 有两种自动装箱过程 第一种 128 127 之内 调用相应包装类的valueOf 例如 Integer i 12 Integer a 2
  • Tank大战游戏模拟(java版)

    Java小项目 坦克大战 1 任务分析 玩家进入游戏 通过操纵坦克来守卫基地 摧毁全部敌方坦克来取得胜利 如果基地被摧毁 或者玩家坦克被摧毁 则判定游戏失败 2 具体分析 图形用户界面使用GUI技术实现 游戏中坦克的方向转动可以通过四种不同
  • Java字符串分析器

    package StruingTokenizer import java util StringTokenizer public class StringTokenizer public static void main String ar
  • Junit单元测试

    概念 JUnit是一个 Java 编程语言的单元测试工具 可以对部分代码的进行测试 Junit是用于Java的单元测试的框架 是别人写好的 特点 JUnit是一个开放源代码的测试工具 提供注解来识别测试方法 JUnit测试可以让你编写代码更
  • JAVA高级类特性(一)

    一 继承性 1 继承的使用 权限修饰符 class A extends B 2 子类 A 父类 基类 SuperClass B 3 子类继承父类后 父类中声明的属性 方法 子类都可以获取到 明确 当父类中有私有的属性或方法时 子类同样可以获
  • 对象锁和类锁的个人理解

    一 对象锁 1 解释 对象锁 顾名思义锁的是对象实例 但程序中同一个类可以有多个实例化对象 所以对象锁只能锁住同一个实例化对象 再两个或多个实例化对象之间不起作用 2 使用方法 1 锁住实体里的非静态变量 synchronized 变量名
  • 【Java编程】关于Java的几个基础问题

    关于Java的几个基础问题 String 和 StringBuffer 和 StringBuilder 的异同 相同点 三者在 Java 中都是用来处理字符串的 三个类都被 final 修饰 因此都是不可继承的 StringBuilder
  • Java的内省技术

    什么是内省 在计算机科学中 内省是指计算机程序在运行时 Run time 检查对象 Object 类型的一种能力 通常也可以称作运行时类型检查 不应该将内省和反射混淆 相对于内省 反射更进一步 是指计算机程序在运行时 Run time 可以
  • java I/0操作 FileWriter类

    package filewriter p1 import java io FileWriter import java io IOException public class FileWriterDemo 获取当前系统的换行符 获取指定键指
  • java 使用匿名内部类的方式创建线程并设置和获取线程名字

    有些方法需要传入接口的实例或者抽象类的实例对象 比如Thread有一个构造方法 Thread Runnable target 这时可以可以自定义类实现Runnable接口 重写接口中的方法 将自定义类的对象传入构造方法中 也可以使用匿名内部

随机推荐

  • 面单扫描成本从2元降到1毛,薄利的物流业怎么靠技术赚钱?

    政策春风 又将加速 数字经济 的列车 在未来5 10年间 千行百业将在数字化 智能化的浪潮下重新做一遍 我们愿意成为这一历史阶段的观察者 记录者 探索 数智化 栏目将通过对消费 汽车 制造业 农业 服务业等千行百业的数字化 智能化落地案例
  • 互联网摸鱼日报(2023-03-08)

    互联网摸鱼日报 2023 03 08 InfoQ 热门话题 两会热点讨论 如何帮助中小企业在数字化时代不掉队 转型调研 鼎新汇 企业行 第一站 走进中国联通软件研究院 为什么你的大多数监控策略都失败了 ChatGPT等AI很强大 但为什么还
  • python是一门面向过程的语言_day5-python之面向过程编程

    import os def init func def wrapper args kwargs g func args kwargs next g return g return wrapper 第一阶段 找到所有文件的绝对路径 init
  • 腾讯云轻量应用服务器使用教程_创建_连接_建站

    腾讯云轻量应用服务器怎么使用 轻量应用服务器使用包括快速创建轻量服务器 轻量服务器远程连接 使用轻量应用服务器搭建网站教程 轻量服务器开通端口教程等 腾讯云服务器网整理了关于腾讯云轻量应用服务器的使用教程 目录 一 创建轻量应用服务器 二
  • 71-C语言-逆序拼接两个字符串

    问题 拼接字符串 拼接的那个字符串 需要先拼接 再连接 思路 两个字符数组 先创建出来并赋值 计算字符串的长度 随后弄两个指针 在一个for循环中 进行添加赋值 第一个数组从字母串末尾开始 然后让另一个数组的末尾处值给值到第一个数组中 随后
  • iperf使用方法windows_iperf3使用方法详解

    iperf3是一款带宽测试工具 它支持调节各种参数 比如通信协议 数据包个数 发送持续时间 测试完会报告网络带宽 丢包率和其他参数 小广告 欢迎喜欢网络技术的朋友加我微信 xfiles sky 一起学习 一 安装 操作系统 Ubuntu20
  • 常用的边缘算子

    边缘算子 边缘算子 sobel Roberts Prewitt Canny Laplacian 对比 边缘算子 参考链接 https blog csdn net yato0514 article details 82051790 图像方面的
  • 【PS CS6】替换证件照背景色

    参考链接 如何用PS替换证件照的背景色 1 首先把你需要处理的证件照片在ps软件里打开 裁剪到合适的位置大小 然后CTRL J 复制一个图层 2 选中复制的图层 然后在工具栏里选择快速选择工具 3 用快速选择工具选中证件照的白色背景 这里需
  • elasticsearch批量插入数据的时候出现java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection

    问题 elasticsearch每次都批量插入几万数据量 然后就会出现下列问题 看这个问题应该是配置的问题 ERROR https jsse nio 443 exec 4 2020 07 09 23 31 54 EsMiniDaansouD
  • 变分(Calculus of variations)的概念及运算规则(一)

    文章目录 1 回顾 微分的定义 2 泛函和变分概念简介 2 1 泛函概念简介 2 2 变分概念简介 3 变分的运算法则简介 4 变分法详述 4 1 历史 4 2 极值 5 变分的运算法则详述 5 1 定义 5 1 1 泛函导数 5 1 2
  • feign使用get请求无法传递对象类型参数解决

    SpringQueryMap是微服务之间调用 使用openfeign通过get请求方式来处理 多入参 也就是通过实体来传参 情况的注解 多用于restful风格方式 作用 SpringQueryMap 简单来说就是将实体转化为表单数据 比如
  • 主析取范式和主合取范式

    主析取范式 小项 是n个命题变元的合取式 其中每个变元必出现且仅出现一次 以本身或否定形式 称这个合取式为小项 例 含有两个变元的小项 P Q P Q P Q P Q 若有n个变元 则有2的n次方个小项 小项编码 含有n个变元的小项的角标用
  • JAVA递归查询根据当前节点查询所有子节点

    public List
  • 数据库从入门到精通01

    文章目录 数据库应用 概念 什么是数据库 关系型和非关系型 关系型数据库 Mysql数据库 MySQL数据存放在哪里 MySQL服务端 MySQL客户端1 DOS窗口 MySQL客户端2 可视化工具 数据库的结构 数据库结构 SQL语句 定
  • python实用脚本(六)—— pandas库的使用(生成、读取表格)

    本期主题 python的pandas使用 往期链接 python实用脚本 一 批量修改目标文件夹下的文件名 python实用脚本 二 使用xlrd读取excel python实用脚本 三 通过有道智云API实现翻译 python实用脚本 四
  • 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(一)

    2021年全国职业院校技能大赛 大数据技术与应用 模拟赛题 一 文章适合了解大数据技术与应用技能大赛 赛题 文章在编写过程中难免有疏漏和错误 欢迎大佬指出文章的不足之处 更多内容请点进 Lino White 查看 未来的世界充满着各式各样的
  • vscode的“安装”、“软件中文化”、“代码格式化”和“前端边编程边看到效果”的过程设置方法

    本文主要用来对vscode进行基础设置 通篇看起来偏过程化 最好从头到尾一步一步跟着设置 目录 一 安装vscode 二 安装 Chinese 插件 使软件中文化 三 安装软件主题 使软件界面个性化 四 将一个文件目录作为项目目录打开 五
  • Matlab:尝试将 SCRIPT XXX 作为函数执行的解决方案

    Matlab 尝试将 SCRIPT XXX 作为函数执行的解决方案 最近在做图像处理小实验的过程中遇到了无比沙雕的情况 被自己佛了 最近真的智商不在线 或者没在线过 先描述一下问题 在Matlab中调用直方图均衡化函数histeq 但是出现
  • 进程、线程相关基础理论总结

    进程 线程相关基础理论 一 进程与线程的区别 1 进程是指一个程序在计算机中的一次运行 它是资源分配的最小单位 2 线程是进程中调度执行的最小单位 3 进程有独立的内存空间 线程没有独立的内存空间 它必须运行在进程中 4 线程之间通信更方便
  • Runnable可以实现资源共享但Thread不能实现资源共享的原因

    转自 http blog csdn net javaniceyou article details 6859305 线程的两种实现方式 通过实现Runnable接口的线程方式可以实现资源的共享 而继承Thread则不可以 原因何在 先看下面