Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在java中终止父线程中的子线程

我在java android平台工作。我正在从主线程创建一个子线程。我想按我的要求停止子线程。我的子线程有一个简单的函数,它没有任何循环。我想要在我想要的时候杀死子线程并释放它正在使用的资源。我搜索了一下,发现了inturrupt()函数。我的主题是:

代码语言:javascript
运行
AI代码解释
复制
public class childThread implements Runnable{
  public void run() {
     firstFunction();
     secondFunction();
    }
}

主线程有以下代码来启动线程:

代码语言:javascript
运行
AI代码解释
复制
Thread tChild;
tChild = new Thread(new childThread(), "Child Thread");
tChild.start();

我的run()函数是这样调用函数的。如何在其中使用interrupt()?请告诉我杀除子线程和释放其资源的任何其他方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-15 12:28:00

通过线程的协作,您可以使用该线程支持的任何方法停止该线程。没有线程的合作,就没有合理的方法来阻止它。例如,假设线程持有锁并将共享资源置于无效状态。如果没有它的配合,你怎么能停止这个线程呢?

您有两个选择:

  1. 为您的线程编写代码,这样它们就不会执行您不希望它们执行的工作。对它们进行编码,以便它们在无事可做时自行终止。这样,它们就不需要其他线程来从外部“到达”。
  2. 对您的线程进行编码,以便它们提供某种方式来告知它们应该终止,然后干净利落地终止。

但这些都是你的选择--它不能靠魔法工作。

想象一个线程做工作,就像你的姐姐借你的车一样。如果你想要回你的车,你需要你姐姐的合作才能把它拿回来。你可以安排她在你需要车的时候自己回来,或者你可以安排你告诉她你什么时候需要车,然后她回来。但你不能改变这样一个事实,那就是她必须知道如何把车开回来,否则车就开不回来了。

线程操纵进程资源,并将它们置于无效状态。它们必须在终止之前进行修复,否则流程上下文将被破坏。

票数 5
EN

Stack Overflow用户

发布于 2013-06-15 12:05:49

由于您没有任何循环,其中检查Thread.interrupted()值,我假设您的firstFunction();secondFunction();做了大量工作,您将不得不在函数firstFunction();secondFunction();条件Thread.interrupted()中检查适当的点,如果为真,则结束该方法。我知道你没有循环,但概念上应该是这样的,

代码语言:javascript
运行
AI代码解释
复制
    Runnable runnable = new Runnable() {
      private int counter;

      public void run() {
        while(true){
          System.out.println(">> Executing " + counter++);

          if(Thread.interrupted()){
            break;
          }
        }

      }
    };

    Thread thread = new Thread(runnable);
    thread.start();

    Thread.sleep(10 * 1000);

    thread.interrupt();
票数 2
EN

Stack Overflow用户

发布于 2013-06-15 11:47:01

您的子线程将需要定期检查Thread.interrupted(),如果返回true,则退出。

你的代码是否有循环并不重要。您只需选择代码执行路径中的各个点,看看是否需要取消。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17123245

复制
相关文章
forEach在集合中的使用
任何类型Collection的可迭代 - 列表,集合,队列 等都具有使用forEach的相同语法。
崔笑颜
2020/06/08
3.7K0
Python中的数组类型
Python没有提供内置的数组类型,但是通过标准库array提供了array类支持数组的创建与使用,可以创建的数组类型包括整数、实数、Unicode字符等等,可以使用help()函数查看更完整的类型列表。 >>> from array import array >>> s = "Hello world" >>> sa = array('u', s) #创建可变字符串对象 >>> print(sa) array('u', 'Hello world') >>> print(sa.tostring())
Python小屋屋主
2018/04/16
3.9K0
【前端】iterable类型的 forEach方法
zhaokang555
2023/10/17
920
Java 类在 Tomcat 中是如何加载的?
https://www.cnblogs.com/xing901022/p/4574961.html
Java技术栈
2019/09/26
2.6K0
Java 类在 Tomcat 中是如何加载的?
TypeScript 中的数组类型定义
在 TypeScript 中声明和初始化数组也很简单,和声明数字类型和字符串类型的变量也差不多,只不过在指定数组类型时要在类型后面加上一个中括号 []
Qwe7
2022/03/19
5.6K0
创建自定义类的对象数组
CN_Simo
2017/12/26
2.4K0
创建自定义类的对象数组
foreach 引发的值类型与引用类型思考
用都知道的一句话概括:“引用类型在堆上,栈上只保存引用;值类型即可存放于栈上也可存放于堆上,值类型变量直接存储值本身”。
雪飞鸿
2018/09/05
7640
foreach 引发的值类型与引用类型思考
java中数组的下标的数据类型是_java返回数组下标
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2.3K0
JS中forEach的坑
我们就按如下写了代码,但是却不能实现我们想要的结果,该方法最终会永远返回true。
码客说
2023/04/06
2.3K0
关于数组中forEach() 、map()、filter()、reduce()、some()、every()的总结
1、forEach() var arr = [1, 2, 3, 4]; arr.forEach((item, index, arr) = > { console.log(item) //结果为1,2,3,4 }) //forEach遍历数组,无返回值,不改变原数组,仅仅只是遍历、常用于注册组件、指令等等。 2、map() var arr = [1, 2, 3, 4]; arr.map((item, index, arr) = > { return item * 10 //新数组为1
前端迷
2018/10/29
1.2K0
C++中的数组类型操作
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
鲸落c
2022/11/28
1.6K0
python里[::-1]_python中的数组类型
当j缺省时,默认为len(alist), 即a[1:]相当于a[1:len(alist)]
全栈程序员站长
2022/09/22
1.6K0
函数表达式在JavaScript中是如何工作的?
在JavaScript中,函数表达式是一种将函数赋值给变量的方法。函数表达式可以出现在代码的任何位置,而不仅仅是函数声明可以出现的位置。函数表达式的语法如下:
王小婷
2023/10/23
4470
在没有DOM操作的日子里,我是怎么熬过来的(中)
前言 继上篇推送之后,在掘金、segmentfault、简书、博客园等平台上迅速收到了不俗的反馈,大部分网友都留言说感同身受,还有不少网友追问中篇何时更新。于是,闰土顺应呼声,在这个凛冽的寒冬早晨,将中篇热文滚烫呈上。 搬好小板凳,接下来,正文从这开始~ 在上篇的众多留言中,有位网友的评论比较具有代表性,摘出来供大家一阅: “ 同感啊楼主 比如做tab的时候,以前jq就是切换一下class,现在vue是切换数据,再根据数据显示class,这弯绕的啊 ” 当然,有评论就有回复,请看下面这位网友是怎么回复他的:
闰土大叔
2018/04/12
1.7K0
在没有DOM操作的日子里,我是怎么熬过来的(中)
【说站】js数组forEach方法的使用
1、forEach()类似于map(),它还将每个元素依次作用于传入函数,但不会返回新的数组。
很酷的站长
2022/11/26
2.9K0
【说站】js数组forEach方法的使用
在Excel中自定义上下文菜单(中)
在下面的示例中,将创建与上文描述的示例相同的按钮和子菜单,但使用RibbonX创建。
fanjy
2022/11/16
1.8K0
在Excel中自定义上下文菜单(中)
Java8 Lambda 表达式中的 forEach 如何提前终止?
也就是说,关键字"return",在这里执行的效果相当于普通for循环里的关键词continue"。
Spark学习技巧
2023/03/21
8740
Java8 Lambda 表达式中的 forEach 如何提前终止?
在PHP中灵活使用foreach+list处理多维数组
先抛出问题,有时候我们接收到的参数是多维数组,我们需要将他们转成普通的数组,比如:
硬核项目经理
2020/01/02
3.8K0
Java中的增强 for 循环 foreach
  foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。在
IT可乐
2018/01/04
3.2K0
Java中的增强 for 循环   foreach
点击加载更多

相似问题

如何检查一个点是否在三角形中?

21

如何检查经度/纬度点是否在坐标范围内?

12

如何确定一个点是否在三角形内

118

如何检查一个点是否在三角形内(在这条线上也可以)

11

查找一个点是否在三角形内

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档