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");
        }



OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码) 本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。 阅读详情

相关推荐

【OpenSearch】从零到一:手把手搭建OpenSearch与Dashboard可视化平台

本文提供了一份详细的OpenSearch与Dashboard可视化平台从零搭建指南。内容涵盖环境准备、系统调优、核心服务安装配置、Dashboard部署与汉化,以及生产环境安全加固建议,帮助用户快速构建一个功能完整的搜索与分析平台。

devops8pract的博客 617

响应式编程简介

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

weixin_45577053的博客 4897

Jupyter实战:解决ModuleNotFoundError之xgboost缺失问题

本文详细解析了在Jupyter Notebook中遇到ModuleNotFoundError: No module named 'xgboost'错误的完整解决方案。通过诊断环境、使用pip正确安装xgboost、配置Python路径以及最终验证,帮助用户彻底解决模块缺失问题,并理解Jupyter内核与Python环境的关系,提升问题排查能力。

weixin_29064103的博客 384

fromRunnable与fromCallable与fromIterable的区别

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

qq_47746614的博客 1510

ArcGIS山体坡度、坡向分析

本篇文章主要记录自己在对山体坡向及坡度分析中的一些操作。

Belence_zhao的博客 7410

【学习笔记-QGIS】 QGIS从零快速上手

安装文章参考:https://zhuanlan.zhihu.com/p/370633306。

Xcong_Zhu的博客 1万+

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

软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)

软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级

片言可决讼,半纸能缚龙 7343

Mono 的创建

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

码易的博客 2361

Go语言全面解析:从入门到精通

Go语言是由Google开发的一种静态类型、编译型编程语言,具有简洁、高效、安全的特点。它特别适合高并发服务、云原生应用和网络编程等场景。Go采用Goroutine和Channel实现轻量级并发,性能接近C/C++。与其他语言相比,Go语法更简洁但类型更严格,编译速度快且跨平台支持好。虽然Go支持多种设计模式和编程范式,但其面向对象实现方式与传统语言不同。标准库丰富且拥有Gin、GORM等企业级框架。核心语法包括包管理、变量声明、函数定义、流程控制等,适合构建高性能后端服务和系统工具。

博哥哥的博客 4925

NXP S32k3 MCAL EMIOS PWM配置

NXP s32k 配置 EMIOS PWM

Leon_0125的博客 2693

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

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

keyboard专栏 1635

华为ensp、思科eve、华为ensp pro中通过cloud桥接本地网络和联通互联网的方法

华为ensp、思科eve中通过cloud桥接本地网络和联通互联网的方法

suofen9703的博客 415

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

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

weixin_35225144的博客 3544

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

线程、多线程和线程池

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

hnnd123的博客 950

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

极力推荐文章:欢迎收藏 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、付费专栏及课程。

余额充值