【Java】线程基本使用——实现 Runnable接口

【Java】线程基本使用——实现 Runnable接口实现 Runnable 接口说明 java 是单继承的 在某些情况下一个类可能已经继承了某个父类 这时在用继承 Thread 类方法来创建线程显然不可能了 java 设计者们提供了另外一个方式创建线程 就是通过实现 Runnable 接口来创建线程应用案例请编写程序 该程序可以每隔 1 秒 在控制台输出 hi 当输出 10 次后 自动退出 请使用实现 Runnable 接口的方式实现 这里底层使用了设计模式 代理模式 gt 代码模拟实现 Runnable 接口开发线程的机制

1. 实现 Runnable 接口

  • 说明
  1. java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能了。
  2. java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程
  • 应用案例
    请编写程序,该程序可以每隔1秒。在控制台输出“你好,兮动人”,当输出10次后,自动退出。
    使用实现Runnable接口的方式实现。




public class Thread02 {     public static void main(String[] args) {     Dog dog = new Dog(); //dog.start(); //这里不能调用 start 方法 //创建了 Thread 对象,把 dog 对象(实现了 Runnable ),放入了 Thread Thread thread = new Thread(dog); thread.start(); } } class Dog implements Runnable {     //通过实现Runnable接口来实现 int count = 0; @Override public void run() {     //普通方法 while (true) {     System.out.println("你好,兮动人-" + (++count) + Thread.currentThread().getName()); //休眠1秒 try {     Thread.sleep(1000); } catch (InterruptedException e) {     e.printStackTrace(); } if (count == 10) {     break; } } } } 

在这里插入图片描述

  • 这里底层使用了设计模式【代理模式】=> 代码模拟实现Runnable接口 开发线程的机制。
public class Thread02 { 
    public static void main(String[] args) { 
    Tiger tiger = new Tiger(); ThreadProxy threadProxy = new ThreadProxy(tiger); threadProxy.start(); } } class Animal { 
   } class Tiger extends Animal implements Runnable { 
    @Override public void run() { 
    System.out.println("老虎..."); } } //线程代理类,模拟了一个极简的Thread类 class ThreadProxy implements Runnable { 
    //可以把 Proxy 类当做 Thread private Runnable target = null; // 属性类型 是 Runnable @Override public void run() { 
    if (target != null) { 
    target.run();//动态绑定(运行类型是Tiger) } } public ThreadProxy(Runnable target) { 
    this.target = target; } public void start() { 
    start0();//这个方法是真正实现多线程的方法 } public void start0() { 
    run(); } } 

在这里插入图片描述

2. 线程使用应用案例–多线程执行

  • 请编写一个程序,创建两个线程,一个线程每隔1秒输出“hello,world”,输出10次,退出,另一个线程每隔1秒输出“hi”,输出5次退出。
public class Thread03 { 
    public static void main(String[] args) { 
    T1 t1 = new T1(); T2 t2 = new T2(); Thread thread1 = new Thread(t1); thread1.start(); Thread thread2 = new Thread(t2); thread2.start(); } } class T1 implements Runnable { 
    int count = 0; @Override public void run() { 
    while (true) { 
    System.out.println("hello world" + (++count)); try { 
    Thread.sleep(1000); } catch (InterruptedException e) { 
    e.printStackTrace(); } if (count == 10) { 
    break; } } } } class T2 implements Runnable { 
    int count = 0; @Override public void run() { 
    while (true) { 
    System.out.println("hi" + (++count)); try { 
    Thread.sleep(1000); } catch (InterruptedException e) { 
    e.printStackTrace(); } if (count == 5) { 
    break; } } } } 

在这里插入图片描述

3. 如何理解线程

在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207486.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:46
下一篇 2026年3月19日 下午1:46


相关推荐

  • 注册境外邮箱有哪些_腾讯会员邮箱登录

    注册境外邮箱有哪些_腾讯会员邮箱登录TOMVIP邮箱可在客户端绑定,支持多个终端邮件同步。163VIP邮箱超大容量、邮件群发效果好、微信邮件实时提醒,企业版邮箱也可以使用误删恢复功能。

    2026年2月23日
    5
  • oracle常见sql笔试题,一路SQL笔试题

    oracle常见sql笔试题,一路SQL笔试题SQLcodeSQL gt witht 教师号 星期号 是否有课 as 2select1 2 有 fromdual3uni 3 有 fromdual4uni 1 有 fromdual5uni 2 有 fromdual6uni

    2026年3月20日
    2
  • 成果被他人窃取_工作窃取模式

    成果被他人窃取_工作窃取模式什么是ForkJoin、ForkJoin分支合并、ForkJoin工作窃取、ForkJoin大数据求和计算什么是ForkJoin?ForkJoin:分支合并ForkJoin特点:工作窃取如何让使用ForkJoinForkJoin求和计算Demo什么是ForkJoin?ForkJoin(分支合并)是jdk1.7之后出来的,并行执行任务,提高效率,用在大数据量场景下。大数据:MapReduce(把大任务拆分成多个小任务,怎么拆分用到了二分算法),每个小任务得出自己的结果,之后再把结果汇总,汇总的过程就是

    2025年11月11日
    4
  • 超详细带你用Java实现QQ的聊天功能

    超详细带你用Java实现QQ的聊天功能超详细带你用 Java 实现的聊天功能步骤 1 定义 JFrame 窗体中的组件 2 在构造方法中初始化窗口的组件 3 使用网络编程完成数据的链接 TPC UDP 协议 4 实现 发送 按钮的监听点击事件 5 实现 回车键 发送数据

    2026年3月26日
    1
  • js 判断字符串中是否包含某个字符include的坑「建议收藏」

    js 判断字符串中是否包含某个字符include的坑「建议收藏」方法一indexOf()(推荐)varstr=”123″;console.log(str.indexOf(“3″)!=-1);//trueindexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回-1。方法二test()varstr=”123”;varreg=RegExp(/3/);console.log(reg.test(str));//truetest()方法用于检索字

    2022年10月6日
    8
  • AopAutoConfiguration matched的异常

    AopAutoConfiguration matched的异常Positivematc AopAutoConfi ConditionalO spring aop auto true matched OnPropertyCo AopAutoConfi ClassProxyin ConditionalO

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号