Run线程(阻塞线程) 如何关闭

Java线程基础-CountDownLatch-批量执行多线程完成,再由主线程发起 与CountDownLatch的第一次交互是主线程等待其他线程。主线程必须在启动其他线程后立即调用CountDownLatch.await()方法。这样主线程的操作就会在这个方法上阻塞,直到其他线程完成各自的任务。构造器中的计数值(count)实际上就是闭锁需要等待的线程数量。这个值只能被设置一次,而且CountDownLatch没有提供任何机制去重新设置这个计数值。System.out.println("执行业务逻辑完成 end...");... 阅读详情

不能使用 stop 方法 暴力关闭 线程


而要使用Interrupted()方法 但是这个方法并非真正的关闭线程了,而是做了一个中断标记 当调用isInterrupted() 值会发生改变。

但是这种思路是针对 非阻塞线程的, 对于阻塞线程(sleep wait )并不会 成功 ,而是会抛出个InterruptedException 。

阻塞线程 调用isAlive 方法 返回值也是False


所以我们的解决思路是:

1.调用 interrupted方法

2.对于阻塞线程就 catch Exception

//中断阻塞异常    抛异常 !!!
        lunborunnable=new Runnable() {
            @Override
            public void run() {
                  Boolean isrun=true;
                    try {
                        lunbothread.sleep(1500);

                        while (isrun) {
                            Log.d("homeview","::"+lunbothread.currentThread().isInterrupted());
                            if (lunbothread.currentThread().isInterrupted()) {
                                return;
                            }

                            if (handler != null) {
                                try {
                                    lunbothread.sleep(2000);
                                    Message lunbo_ms = handler.obtainMessage();
                                    lunbo_ms.what = 2;
                                    lunbo_ms.sendToTarget();

                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                    return;
                                }
                                Log.d("is execute?", "handler?");

                            } else {

                                Log.d("handlernull", "handler?");
                            }
                        }


                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }


            }
        };
        lunbothread=new Thread(lunborunnable);
         lunbothread.start();


interrupted方法
        if(homepagerView.lunbothread!=null){
            Log.d("lunbothread","main isinterrupted? :"+ homepagerView.lunbothread.isAlive());
            homepagerView.lunbothread.interrupt();
            Log.d("lunbothread","main isinterrupted? :"+homepagerView.lunbothread.isInterrupted());

        }
        else {
            Log.d("lunbothread","null");
        }



NX二次开发入门必看:手把手教你搭建开发环境 想顺利开展nx二次开发,第一步就是配置好开发环境。本文详细讲解从安装准备到环境调试的完整流程,结合实际操作细节,帮你避开常见坑点,快速进入nx二次开发的实战阶段。 阅读详情

相关推荐

智能车轮腿组‘定点排雷’科目全解析:从雷区识别到姿态控制

本文深入解析了智能车竞赛轮腿穿越组‘定点排雷’科目的核心技术。从构建鲁棒的视觉识别系统,到融合编码器与IMU进行厘米级定位,再到实现框内高精度旋转的姿态控制,提供了一套完整的从感知到执行的闭环技术方案,助力参赛队伍攻克这一高难度科目。

weixin_29161719的博客 639

响应式编程简介

对于响应式编程的解释 个人理解: Java中传统的线程接口有两种,一种是Runable,一种是Callable;一个没有返回值,一个有返回值;Callable的返回值用Future来接收。无论是Runable还是Callable,都要等线程执行完才能继续操作下去,这个过程中就造成了阻塞。 如果想我把任务分配下去,并且告诉他任务执行完成就怎么怎么样,然后我就不用管了,这样一种思想可以理解成是响应式编程,就像是“好莱坞原则”(演员不用主动联系导演,导演会去联系演员,也就是你不要来找我,我会去找你)。 响

weixin_45577053的博客 4897

512分辨率万能遮罩模型实战指南:从下载到高精度应用

本文提供了512分辨率万能遮罩模型的完整实战指南。该模型经过超过540万次迭代,专门优化了对头发、手、眼睛等复杂区域的识别。文章详细介绍了从可靠渠道下载、环境部署、使用DF_ICE工具批量应用遮罩,到利用XSeg Editor进行高精度精修的全流程,旨在帮助用户显著提升AI换脸合成视频的质量与效率。

y2z3a4b5c的博客 1162

fromRunnable与fromCallable与fromIterable的区别

fromRunnable与fromCallable与fromIterable的区别 :示例:

qq_47746614的博客 1510

别再手动连线了!用Tessent IJTAG的SIB和TDR,5分钟搞定复杂芯片的DFT网络分区

本文探讨了如何利用Tessent IJTAG的SIB(Segment Insertion Bit)和TDR(Test Data Register)技术,高效解决复杂芯片DFT网络分区问题。通过智能化的扫描链管理和声明式定义,显著降低连接复杂度,提升测试覆盖率和良率,适用于超大规模SoC设计。

weixin_29251131的博客 300

ctle电路求帮忙分析低中高频调节原理,搭好了电路该怎样调节参数?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1126

RX之异步操作(start、toAsync、startFuture、deferFuture、fromAction、fromRunnable、forEachFuture、runAsync)

需要在buld.gradle中加入compile 'io.reactivex:rxjava-async-util:0.21.0' 一、start 返回一个Observable,它发射一个类似于函数声明的值。编程语言有很多种方法可以从运算结果中获取值,它们的名字一般叫functions, futures, actions, callables, runnables等等。在Start目录下的这

nicolelili1的专栏 3599

2.0 电子凸轮 西门子1500电子凸轮使用研究1

本文研究了S7-1500T电子凸轮同步控制技术,通过仿真实验得出以下结论:1)通过比例系数可调整凸轮曲线形状;2)解除同步需调用从轴其他运动指令;3)详细阐述了凸轮同步的5个实施步骤。重点分析了三种同步类型(主值距离同步、动态参数同步和直接同步)的特点及应用场景,并探讨了缩放系数、偏移量等参数对凸轮曲线的影响。同时介绍了凸轮应用模式及常见异常处理方法,为工程应用提供了重要参考。

qq_34047402的博客 809

Mono 的创建

Reactor 是一个基于 JVM 之上的异步应用基础库。为 Java 、Groovy 和其他 JVM 语言提供了构建基于事件和数据驱动应用的抽象库,可用它构建时效性流式数据应用,实现应用高效、异步地传递消息。 Reactor 性能相当高,在最新的硬件平台上,使用无堵塞分发器每秒钟可处理 1500 万事件。 Reactor 中的两个重要的概念是Flux 和 Mono。Mono 表示包含 0 或者 1 个元素的异步序列。Flux 表示包含 0 到 N 个元素的异步序列。他们包含

码易的博客 2361

Oracle EBS与SAP数据数据切换至迁移华为MetaERP分析

Oracle EBS到华为MetaERP的数据迁移可采用“表对表复制”思路,因其模块化设计下数据模型标准化、边界清晰。核心业务对象存储在结构明确的主表中,与MetaERP模型兼容度高,便于直接映射。而SAP到MetaERP的迁移则因SAP高度优化的复杂表结构(如簇表/池表)、数据分散冗余、深度依赖配置等特点,无法简单复制,必须采用基于业务对象的迁移方法,通过视图/BAPI提取数据并进行深度转换。两种迁移的本质差异源于源系统的数据模型设计理念不同。

金牌架构师 1378

Python 爬虫实战:赛事分析平台构建与比赛数据抓取

在体育赛事日益丰富的今天,对比赛数据的收集与分析对于运动员、教练团队以及体育爱好者都具有重要意义。通过构建一个赛事分析平台,我们可以系统地抓取、整理和展示各类比赛数据,为用户提供全面的赛事洞察。本文将深入讲解如何利用 Python 爬虫技术实现这一平台的构建,涵盖从目标网站分析到数据可视化展示的全过程。

u014481728的博客 3180

Mono.fromRunnable 和 Mono.zip 的详细解释和示例

是一种创建Mono的方式,它接受一个Runnable作为参数。当Mono订阅者订阅时,Runnable会被执行。不会发出任何值,只会执行Runnable的逻辑,并在完成后发出一个完成信号。

keyboard专栏 1635

Qt —— QWebEngineView加载谷歌离线地图(包含离线地图瓦片下载制作、附谷歌地图开发文档)

  关注 微信公众号搜索"Qt_io_"或"Qt开发者中心"了解更多关于Qt、C++开发知识.。 笔者 - jxd

1万+

android子线程会自动销毁吗,Android如何安全的关闭线程

Android如何安全的关闭线程发布时间:2019-01-04 15:57,浏览次数:859, 标签:Android正常情况下,当线程中的run方法执行完毕后,线程是会自动关闭,不需要我们手动去关闭的。如:newThread(newRunnable(){ @Override publicvoidrun(){//执行操作 } }).start();该线程在run方...

weixin_35225144的博客 3544

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

线程、多线程和线程池

开启线程的三种方式? 1)继承Thread类创建线程 2)实现Runnable接口创建线程 3)使用Callable和Future创建线程 Callable接口提供了一个call()方法作为线程执行体,call()方法比run()方法功能要强大。 call()方法可以有返回值 call()方法可以声明抛出异常 线程和进程的区别? 进程是指程序执行时的一个实例。 线程是进程的一个实体。 进程——资源...

hnnd123的博客 950

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Interview】线程、多线程和线程池

1、开启线程的三种方式 https://www.cnblogs.com/xiaostudy/p/9800601.html 2、线程run()和start()方法区别 https://blog.youkuaiyun.com/QQ2899349953/article/details/81772104 3、控制某个方法允许并发访问线程的个数 SemaphoreTestMain https://www.jianshu...

czZ__czZ的博客 227

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

线程、多线程和线程池面试专题

极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1、开启线程的三种方式? 1)继承Thread类,重写run()方法,在run()方法体中编写要完成的任务 new Thread().start(); 2)实现Runnable...

anpaikan3027的博客 450

如何关闭线程 android,Android如何安全的关闭线程

正常状况下,当线程中的run方法执行完毕后,线程是会自动关闭,不须要咱们手动去关闭的。ide如:spanewThread(newRunnable(){@Overridepublicvoidrun(){//执行操做}}).start();该线程在run方法中的操做执行完毕后,线程会自动关闭。线程而当run方法中的操做会不断循环执行时如:codenewThread(newRunnabl...

weixin_33037813的博客 3426

线程池内部每个线程都是一个worker,worker 执行任务的一个逻辑是怎么样的?每个线程它都有一个 run 方法,run 里面的内部底层执行逻辑是什么样的?

take() 方法是阻塞的,表示如果队列为空,Worker 线程会被挂起,直到有新的任务被提交进队列。如果队列中有任务,take() 会返回队列中的任务并将其从队列中移除。每个 Worker 对象会被一个线程绑定,该线程会执行 run 方法,进而执行任务。在每次循环中,Worker 会调用任务队列的take() 方法从队列中获取一个任务。获取到任务后,Worker 会调用任务的 run() 方法来执行具体的任务逻辑。Worker 是一个实现了 Runnable 接口的对象,负责执行具体的任务。

a3466566301的博客 325

(小白程序员)Task.Run的作用?在多于一个线程在跑的时候。

先讲遇到的问题就是,首先我需要把在A完成了的东西存起来,才可以去b点。但是问题来了我在sql server里面看到明明东西已经save了但在A点的画面就是不会关起来。这时候我的前辈就会不会是A点占用的线程所以我们就使用了。Task.Run来同时完成2件事情。

2502_91145779的博客 312

QT的多线程详解(包含案例)

#QT实现多线程(重写RUN函数的方法)

Lancer7662的博客 6306

java多线程之线程池

线程池 利用Executors的静态方法创建 1.Executors.newFixedThreadPools 该类型线程池会先创建一个指定大小的线程池,从描述可以看出,此线程池是一个定长的线程池,线程数最多不会超过指定值,当满足条件的线程被提交且可用线程数已满,该线程会加入等待队列中。如果有任意一个线程在被终止之前发生失败,会创建一个新的线程替代。 Param 可以看到该方法还有一个重载...

杆子的博客 304

Linux创建内核线程

struct;if!IS_ERR;;其中kthread_create()只是创建一个内核线程,但并没有启动,需要调用wake_up_process()来启动线程,所以内核又帮我们定义了一个宏kthread_run来帮我们搞定。内核线程创建成功后,会返回一个struct task_struct对象指针,方便我们的后续操作。

qq_43587089的博客 607

关闭由ServerSocket阻塞的线程的一种方法

关闭由于serverSocket监听阻塞住的线程,对于未阻塞的线程简单的设置一个变量stop,每次轮询检测stop的值即可,但是这对于被阻塞的线程是行不通的。由于被阻塞住,根本无法检测stop变量的值。 方法 程序提供了closeClient()方法,在这个方法中,首先设置stop变量为true,然后与本serverSocket建立链接,建立之后立即关闭。这样在run方法中的serverSocke...

Thincor的博客 1055

Java线程池ThreadPoolExecutor源码解析

通常而言线程池中的线程数是不允许超过最大线程数的,但通常而言这是一种机制的完整性和规范,假如是自定义线程池的情况下,就有可能出现这种情况,另外一种是本人推测虽然由于增加工作线程数的操作底层是通过CAS去实现的,底层是原子性的,同时进行CAS操作就有可能导致ABA问题出现,或者操作失败,或者不断自旋的可能,而这个操作则是为了减少不必要的线程开销,如果阻塞队列为空说明没有任务,那自然不需要多余的线程数去执行,因此会发生接下来的操作,递减线程数,然后跳到下一次循环.

Reische的博客 363

17、ForkJoinPool之工作线程的启动与任务的fork以及join

一、工作线程的启动 ForkJoinPool创建的工作线程类型为ForkJoinWorkerThread,下面是它的run方法 1.1 启动扫描任务 public void run() { if (workQueue.array == null) { // only run once Throwable exception = null; try { ...

zhen_hong的博客 1535
上一篇: MVP框架思想和小案例实现
下一篇: 签名-代码混淆Progurard-反编译
Nela
博客等级 码龄11年 9粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值