首页 > 其他分享 >Android开发 - Runnable 类任务接口定义与后台任务待办解析

Android开发 - Runnable 类任务接口定义与后台任务待办解析

时间:2024-08-28 20:25:43浏览次数:9  
标签:Runnable Thread 接口 任务 待办 线程 后台任务 执行

什么是 Runnable

  • Runnable 接口是用来定义一个任务的接口,这个任务可以在线程中执行。通俗地说,它就像一个“待办事项”,用来描述需要在一个单独的线程中完成工作Runnable 接口非常简单,只定义了一个方法:run()。当一个实现了 Runnable 接口时,它需要提供这个方法的实现,里面写上你想要在新线程中执行的代码

    public interface Runnable {
        void run();
    }
    

使用 Runnable 的场景

  • 开发一个应用程序时,需要在后台执行一些任务,比如处理文件下载数据或者执行耗时的计算不希望这些任务阻塞主线程(特别是在图形用户界面应用中,阻塞主线程会导致界面卡顿)时。就可以使用 Runnable创建一个新的任务,并把它交给一个线程去处理

Runnable 接口的使用

  1. 实现 Runnable 接口创建一个类来实现 Runnable 接口,并重写 run() 方法。在这个方法里,编写想要执行的代码

    public class MyRunnable implements Runnable {
        @Override
        public void run() {
            // 这里是你希望在线程中执行的代码
            for (int i = 0; i < 5; i++) {
                System.out.println("Hello from a thread! " + i);
                try {
                    Thread.sleep(1000); // 让线程休眠1秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  2. 创建线程并传入 Runnable 实例创建一个 Thread 对象,并传入创建的 Runnable 实例。然后调用 start() 方法启动线程

    public class Main {
        public static void main(String[] args) {
            MyRunnable myRunnable = new MyRunnable(); // 创建Runnable实例
            Thread thread = new Thread(myRunnable);  // 创建一个线程并传入Runnable实例
            thread.start();  // 启动线程
    
            // 主线程可以继续做其他事情
            for (int i = 0; i < 5; i++) {
                System.out.println("Hello from the main thread! " + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  • 运行这个程序时,你会看到两个“Hello”消息交替输出,一个来自主线程,一个来自新的线程

Runnable 和 Thread 的区别解析

  • Runnable 是一个接口:它只包含一个 run() 方法,用来定义需要在线程中执行任务逻辑

  • Thread 是一个类:它本身是一个线程,它可以直接调用 start() 方法启动线程

  • 关注点区别RunnableThread 的设计体现了面向对象编程中的关注点分离原则Runnable 关注的是“要做什么事情”,而 Thread 关注的是“如何去做这件事情”

Runnable 接口的好处

  • 灵活性:通过实现 Runnable 接口,一个类可以继续继承其他类,因为 Java单继承的。但如果直接继承 Thread 类,那么这个类就不能继承其他类

  • 任务与线程的分离:使用 Runnable 可以将任务的定义与执行分开,让一个任务可以在多个线程中执行,或者在某些情况下可以复用

  • 更好的面向对象设计:使用 Runnable 接口更好地实现对象的解耦,让任务的执行方式更加灵活可控

总结

  • Runnable 接口是实现多线程的一种简单而灵活的方式。通过实现 Runnable 接口并将其传递Thread 对象,我们可以很容易地在程序中创建和管理多个线程,确保每个任务都能在后台高效地运行不阻塞主线程的执行

标签:Runnable,Thread,接口,任务,待办,线程,后台任务,执行
From: https://www.cnblogs.com/ajunjava/p/18385496

相关文章

  • Vite+Vue3 项目 华仔待办
    此“华仔”,不是彼“华仔”,你懂的!先来了个截图紧跟着,实现步骤也来了1.安装Node.js,终端运行npmcreatevue@latest,项目名vue-to-do,后面的选项全选No;2.cdvue-to-do进入项目目录,npminstall安装依赖,npmrundev启动Vite开发服务器;3.修改index.html和main.js;i......
  • JavaScript 构建一个简单的待办事项应用
    包含添加、删除、标记任务功能。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>TodoList&......
  • 挑选最佳待办事项工具:专家指南
    国内外主流的10款好用的待办事项软件对比:1.PingCode;2Worktile;3.微软ToDo;4.MeisterTask;5.Airtable;6.Wrike;7.Basecamp;8.ProofHub;;9.嘀嗒清单(TickTick);10.番茄ToDo。在管理日常任务时,挑选一款合适的待办事项软件可能是个挑战,尤其是市面上有如此多的选项。如何确保你选择的工具不仅......
  • 顶尖待办事项软件对比:找到你的最佳匹配
    国内外主流的10款待办事项管理软件对比:PingCode、WorktileTodoist、TickTick、Teambition、MicrosoftToDo、.Asana、Tower、番茄ToDo、飞书。在面对日益复杂的工作和个人任务时,找到一款能够有效帮助你管理日常待办事项的软件,变得越来越重要。无论是在提高个人生产力,还是在......
  • LangChain的LCEL和Runnable你搞懂了吗
    LangChain的LCEL估计行业内的朋友都听过,但是LCEL里的RunnablePassthrough、RunnableParallel、RunnableBranch、RunnableLambda又是什么意思?什么场景下用?1、LCEL的定义和原理LangChain的核心是Chain,即对多个组件的一系列调用。LCEL是LangChain定义的表达式语言,是一种更加高效......
  • 如何选择合适的待办事项软件?全面解析
    国内外主流的10款待办事项软件对比:PingCode、Worktile、Teambition、Tower、阿里钉钉、飞书、Asana、Trello、Evernote、MicrosoftToDo。在寻找合适的待办事项软件时,你是否感到选择众多、难以决断?一个好的待办事项工具可以大大提升你的工作效率和日常生活的组织性,但在面对市......
  • 使用案例显示时在“.txt”文件中打印现有待办事项时出现名称错误
    我正在尝试使用以下代码中给出的案例显示将现有的待办事项保存在我的txt文件中:whileTrue:user_action=input("Typeadd,show:")user_action=user_action.strip()matchuser_action:case'add':todo=input("Enteranytodo:")+......
  • LangChain补充二:LCEL和Runnable更加方便的创建调用链
    https://www.alang.ai/langchain/101/lc05一:LCEL入门LangChain的设计围绕着让AI应用开发者能够方便地将多个流程连缀成一个AI应用的业务逻辑,包括Chain与Agent。每个流程都被封装成一个runnable(langchain_core.runnables),包括提示语模板、模型调用、输出解析器、工具......
  • “Java多线程编程:从Thread到Runnable再到Callable的深入探索“
    1什么是进程?通俗地解释为:计算机中正在执行的一个程序实例。进程它是系统分配资源的基本单位。想象一下,你的电脑就像是一个大工厂,而每一个进程就像是这个工厂里的一条生产线或者一个工作小组,它们各自独立地运行着不同的任务,但同时又受到整个工厂(即操作系统)的管理和调度。......
  • linux 中 检测后台任务
     001、[root@PC1test2]#lstest.sh[root@PC1test2]#cattest.sh##脚本#!/bin/bashseq10000000000000000000000000000000000000&>/dev/null[root@PC1test2]#nohupbashtest.sh>log_Download2>&1&......