线程的编程4种实现方法

从报错到成功:手把手教你避坑clusterProfiler安装全流程 本文详细解析了clusterProfiler安装过程中的常见报错及解决方案,从CRAN安装误区到Bioconductor拼写错误,再到依赖包安装失败等问题,提供了五步正确安装法。特别适合生物信息分析新手快速掌握R包安装技巧,避免踩坑。 阅读详情

1.继承Thread类,覆盖定义run方法实现

class LeftThread extends Thread {
    public void run() {  //线程的执行线索定义在run方法中,run方法是覆盖Thread类中的方法进行定义
        for (int i = 0; i < 50; i++) {  // 如果需要反复执行的动作,则需要在run方法中使用循环
            System.out.println("左手一个慢动作"+i);
            try {
                this.sleep(300);//使当前线程对象停止300毫秒,参数为long,单位为毫秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

优点:可以直接使用Thread类中的方法,代码简单

缺点:继承Thread类之后就不能继承其他的类

QA:是否可以直接调用run方法?  可以,但子线程不会启动

2.实现Runable接口并使用接口提供的run方法

class RightThread implements Runnable {  //实现接口的方式定义线程
    public void run() { //接口中定义的抽象方法
        for (int i = 0; i < 50; i++){
            System.out.println("右手慢动作重播"+i);
            try {
                Thread.currentThread().sleep(300);//使当前线程对象停止300毫秒。由于当前类并没有继承于Thread类,所以不能直接调用sleep方法,需要通过Thread.currentThread()获取运行程序的线程对象才能调用sleep方法
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
//创建线程对象
//Thread t1=new Thread(new A2());
//启动线程,执行A2的run方法
//t1.start();

优点:即使自定义类已经有父类了也不受影响,因为可以实现多个接口

缺点:在run方法内部需要获取到当前线程的Thread对象后才能使用Thread中的方法

实现run方法时没有返回值,所以需要获取线程的执行结果需要自行编程实现

public class A3 implements Runnable {
	private int begin,end;
	private int result;
	public A3(int begin,int end){
		this.begin=begin;
		this.end=end;
	}
	public void run(){
		for(int i=begin;i<=end;i++){
			result+=i;
		}
	}
	public int getResult(){
		return this.result;
	}
}

3.实现Callable接口和Future接口的方法

class A3 implements Callable {  // <>叫做泛型,可以理解为类型参数
    private int begin,end;
    public A3(int begin,int end){
        this.begin=begin;
        this.end=end;
    }

    @Override
    public Object call() throws Exception {
        int res=0;
        for(int i=begin;i<=end;i++)
            res+=i;
        return res;
    }
}

//创建并启动线程对象
//Java针对Future和Runnable接口提供了一个实现类FutureTask
//Callable c=new A3();
//FutureTask ft=new FutureTask(c);
//Thread t=new Thread(ft);
//t.start();

//如何获取线程的执行结果
Object res=ft.get();  //会阻塞当前执行线程,并等待子线程执行完成后获取返回值

优点:可以获取返回值,可以抛出异常

缺点:代码编写较为复杂

4、使用线程池

基础原理是享元模式

享元模式Flyweight Pattern主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式

优点:大大减少对象的创建,降低系统内存的使用,以提高程序的执行效率。

缺点:提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。

大疆sdkV4以及V5webrtc推流 webrtcSDK中要用它的VideoCapturer来初始化推流 ViewdoCapturer是一个接口我们继承它 然后重建创建文件CapturerAircraft.java文件。CameraUtil.java这个是我们用来创建CapturerAircraft的一个工具。除了CapturerAircraft这个文件不一样外其他都是一样的。PlayBodyBean.java这个是我们的配置文件。下面的有个代码块第一个是v4的 第二个是v5的。接着我们来创建几个推流用到的webrtc工具。 阅读详情

相关推荐

HyperLPR3车牌识别-Android-SDK光速部署与使用

基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.快速部署AndroidSDK

tunm 6121

1、线程篇 - 从理论到具体代码案例最全线程知识点梳理(持续更新中......)

目录标题前言线程理论知识线程创建的四种方式1.继承Thread类,实现run方法2.实现Runnable接口,重写run方法3.实现Callable接口4.使用线程池线程的状态如何优雅的中断一个线程方案1:设置标志位方案2:用Thread.stop()方案3:调用suspend()和resume()方法方案4:线程中断机制线程重要方法介绍yield和joinsleep和wait的区别线程安全知识线程通信/同步的方式ThreadLocal讲解 前言 线程理论知识 线程创建的四种方式 1.继承Thread类,实

qq_43783527的博客 1143

[特殊字符]交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片

🚦交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片

cver123的博客 2075

线程的编程4种实现方法(下)

接口中只能定义常量和抽象方法 接口中只能定义公共的常量,接口中的属性默认是publicstaticfinal类型的,必须是publicstaticfinal类型的 nterfaceIA{ Stringname="aaa"; //这里实际上是常量定义,不是属性,它的限定词是publicstaticfinal Stringname="aaa", 必须在声明的同时进行赋值 } 在接口中不能定义静态块static{ }接口中不能定义构造器 接口中只能定义公共的抽象方法,只有在JDK1.8+中可以使用defaul

qq_46028988的博客 340

Foxmail 7.2.25以下版本XSS漏洞实战复现:手把手教你如何构造恶意邮件(含防御方案)

本文深入解析Foxmail 7.2.25以下版本的XSS漏洞(CNVD-2025-06036),详细展示如何构造恶意邮件进行跨站脚本攻击,并提供从客户端升级到企业级防护的多层次防御方案,帮助用户有效防范安全风险。

view3的博客 163

蓝桥杯FPGA赛道积分赛

代码如下: 按键驱动 代码如下 按键驱动 代码如下: 顶层文件 按键驱动 数码管驱动 声明:本代码借鉴网络资料,如有侵权和错误请联系作者删除。我是从寒假开始备赛的,由于我基础不行,备赛过程中也是混混呃呃的,备赛效率不高,总体来说备赛不认真,有点拖拉,但是最后我也坚持备赛到了今天,在备赛过程中,即复习了旧的东西,也学到了新的东西,总结起来还是有点收获的,后天北京、天津、河北地区就要进行省赛了,我会全力以赴,不管结果怎么样,尽力就好,最后祝大家都能

weixin_69804913的博客 1995

线程的编程4种实现方法(上)

如何使用接口 一般使用接口隔离具体实现,可以将类之间的相互依赖变为类对接口的依赖。例如出差类和会飞的东西是通过会飞 的接口进行隔离,这样不管出差类需要修改或者会飞的东西需要修改,都不会相互影响 如果一组相关的类中有公共的方法和特殊的方法,可以使用抽象类,在抽象类中固化公共的方法,而无需具体子类 重复实现;但是在抽象类中无法实现的方法可以延迟到子类中再实现。例如排序器BubbleSorter,其中抽象类 BubbleSorter固化了所使用的冒泡排序算法,而将无法实现的bigger比较算法延迟到BubbleS

qq_46028988的博客 200

一种低照度目标检测新策略:IAT集成YOLOv8实现暗光与雾霾环境下的性能优化【附核心实战代码】

随着深度学习和计算机视觉的快速发展,目标检测模型在各个领域中的应用不断扩展,特别是在低照度环境下的视觉任务。YOLOv8作为当前最先进的目标检测模型之一,在高亮度和良好照明条件下表现出色,但在低照度环境下的性能存在一定的不足。为了解决这一问题,我们提出了一种轻量级的低照度图像增强网络(IAT)来改进YOLOv8的暗光检测能力。本篇文章将深入探讨这一创新改进,并附带代码实现,帮助大家更好地理解这一技术的应用和效果。

一键难忘的博客 3502

java学习之:多线程编程(4)线程安全的类;如何使用 Collections 中的方法实现线程安全

什么叫做线程安全的类 这个类中的所有方法,都使用了 sychronized 关键字来修饰,保证使用这些方法的时候,多个线程之间都是安全的,同步的。 线程安全的类 StringBuffer Hashtable Vector 线程不安全的类 StringBuilder HashMap ArrayList 如果不涉及到同步问题,建议使用线程不安全的类来代替线程安全的类,因为这样可以节省资源,运行效率会更高。 实际应用 实际应用中,通常使用 Collections 中的 : synchronized

qq_42902997的博客 322

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1502

效果炸裂_安装midscene_copw基于midscene操作电脑_基于视觉的软件测试执行_MIDSCENE的安装和使用---AI大模型应用探索0012

摘要:本文介绍了如何通过安装MidSceneJS来增强Copaw的屏幕操作能力。首先需要安装Node.js和npm,并配置淘宝镜像源加速安装。然后全局安装MidScene CLI工具(npm install @midscene/cli -g)。接着配置视觉大模型服务,通过设置环境变量指定模型API密钥、名称、基础URL和家族类型(如qwen3.5-27b),配置文件需存放在C:\Users\Administrator.copaw目录。安装成功后,MidScene已能成功识别并操作屏幕,使用效果良好。文中还提

添柴程序猿的专栏 641

SOUI4多线程编程指南:异步任务与UI更新

SOUI4作为一套成熟的PC端应用开发框架,在多线程编程方面提供了完善的解决方案。本文将详细介绍SOUI4中的多线程编程模型,重点讲解异步任务处理和UI线程安全更新的实现方式,帮助开发者构建高性能、响应式的桌面应用程序。 ## 多线程编程基础与框架概述 ### SOUI4线程模型架构 SOUI4采用**任务驱动**的多线程模型,核心组件包括`TaskLoop`任务循环、`Thread`线程封...

gitblog_00994的博客 1179

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析

伶俐角少儿编程 639

Android多线程编程

Android的UI是线程不安全的。即,如果想要更新应用程序里的UI元素,必须在主线程中进行,否则就会出现异常。但是如果我们想在主线程中开一个子线程来执行一些耗时操作(比如网络请求等),在Android中该怎么做呢?这个时候就要用到handler的消息机制了。

penghc的博客 1347

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Qt使用多线程的一些心得——1.继承QThread的多线程使用方法

摘要 Qt多线程方法1 继承QThread 1写一个继承于QThread的线程 2 QThread的几个函数quitexitterminate函数 3 正确的终止一个线程 4 如何正确启动一个线程 41正确的启动一个全局线程和UI一直存在的线程 42 如何启动一个局部线程用完即释放的线程 继承QThread的一些总结 使用QObject实现多线的方法见:http://blog.youkuaiyun.com/cz

尘中远的程序开发记录 12万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

创建线程的4种方式以及实现的代码

创建一个线程有四种方式: 继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和Future创建线程 使用线程池例如用Executor框架 1.继承Thread类创建线程: 创建线程的步骤: 定义Thread类的子类,并重写该类的 run() 方法,该方法的方法体就是县城需要完成的任务,run() 方法也成为线程的执行体 创建Thread子类的实例,也就是创建了...

大房子爱生活的博客 1570

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【转】Silverlight 4中五种多线程编程技巧

【摘自】http://tech.it168.com/a2011/0507/1187/000001187429_all.shtml 【IT168 专稿】Silverlight是微软重要的RIA工具,可以广泛应用于网络应用开发领域和桌面领域。事实上,自Silverlight for Windows Phone 7登台以来,Silverlight已经吸引了越来越多的开发者。与其直接的竞争对手Fl...

weixin_30247159的博客 96

C#——await与async实现多线程异步编程

以前,我们或许用过Thread,在主线程执行的时候,新开另一个新线程,来执行新方法。           今天看别人发给我的一段代码的时候发现了一个不认识的await,但是又感觉很熟悉的样子,感觉是线程那块儿的东西,查了下,发现一个简单的方法实现多线程异步编程。(PS:framework 在4.5以上才可以哦~)       /// /// 测试方法 ///

我们的征途是星辰大海 3727

java多线程的几种实现方式

1.继承Thread类,重写run方法 Thread类本质上是实现了Runnable接口的一个实例。因此,启动线程的唯一方式就是通过Thread类的start()方法,start()方法是个native方法,它会启动一个新的线程,并执行run()方法。 /** * Create By CodeCow on 2020/8/3. */ public class TestThread { public static void main(String[] args) { MyThr..

qq_40277163的博客 3897

Silverlight 4之全方位剖析:多线程编程

Silverlight是微软重要的RIA工具,可以广泛应用于网络应用开发领域和桌面领域。事实上,自Silverlight for Windows Phone 7登台以来,Silverlight已经吸引了越来越多的开发者。与其直接的竞争对手Flash一样,Silverlight自第

lbuskeep的专栏 1105

qt 多线程的两种实现方式

一. qt4.7版本之前使用的方法(新版本依然可以用) 1. 自己写一个类,派生自QThread 2. 在该类中有一个虚函数 --- run 3. 通过信号槽与主线程通信 主线程中 4. 创建子线程对象 5. 启动子线程start()槽函数 --- run()函数自动被调用 二. qt4.7版本之后使用的方法 1. 将要在子线程中做的操作抽象为一个类(Mywork)

没有如果的博客 2821

多线程编程的五种实现

多线程目的:   为了最大化发挥多核处理器的性能,使应用程序中的任务能够得到高效率执行。让任务响应更加迅速.多线程的实现方式:   1,实例化Thread类,这种方式称之为专用线程,默认是前台线程,start之后不会被迫关闭,应用程序只会在线程任务执行完成之后关闭,在进程结束时或者任务完成时会被回收。如果创建的Thread指定为后台线程,  应用程序可以不考虑线程任务是否执行完而强制关闭线程,前台...

zq693112812的博客 440

显示使用线程实现异步编程1.0

这是一种最简单实现异步的方法之一 public class sync { public static void doSomethingA(){ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); ...

qq_40297463的博客 173
上一篇: JAVA程序练习————统计一个文本文件中所有字符的出现次数并倒序输出
下一篇: 线程池的工作原理和具体实现类ThreadPoolExecutor
普罗维登斯的猫
博客等级 码龄6年 45粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值