Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >Java -用“返回”关闭线程不起作用

Java -用“返回”关闭线程不起作用
EN

Stack Overflow用户
提问于 2015-05-15 02:28:53
回答 3查看 1K关注 0票数 0

在包含我的main方法的类中有以下代码

代码语言:javascript
代码运行次数:0
复制
ExecutorService executor = Executors.newFixedThreadPool(1);
Runnable formatConcentration = new formatConcentration(87);
executor.execute(formatConcentration);
System.out.println("Called an instance of formatConcentration");
while (!executor.isTerminated())
{
    //stay Alive
    Thread.sleep(1000);
    System.out.println("Still alive");
}
System.out.println("Program successfully finished");
return;

这将创建formatConcentration类的实例。代码如下(为了这个示例,我已经把我的所有功能都去掉了)。

代码语言:javascript
代码运行次数:0
复制
public class formatConcentration extends Thread{
    private int numberOfNewRows;

    formatConcentration(int rows)
    {
        this.numberOfNewRows = rows;
    }
    public void run() {

        System.out.println("Running the Formatting Script");
        final int numberOfNewRegistered = this.numberOfNewRows;
        try 
        {
            System.out.println("Finished formatting");
        }//end of try
        catch (Exception e1) 
        {
            log.log(e1.toString());
            log.closeLog() ;
            System.exit(1) ;
        }
        System.out.println("Still Finished formatting");
        return;
    }
}

我的问题是,一旦调用了return,它就不会终止线程。

我已经做了相当多的环顾四周,据我所知,这应该是好的,但我可以想象,我忽略了一些小的东西,并会感激新的眼睛对这个问题。

或者,如果有人建议如何在run(){}方法中杀死线程,我会非常感激它(最好不要设置一个变量,我将在主类中签入它,但如果我必须这样做,我知道,一旦它到达返回语句,它就完成了,并且不再需要对在run()中创建的变量的任何引用。

向控制台生成的输出如下:

代码语言:javascript
代码运行次数:0
复制
Called an instance of formatConcentration
Running the Formatting Script
Finished formatting
Still Finished formatting
Still alive
Still alive
Still alive
Still alive
Still alive
etc.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-15 02:36:47

代码语言:javascript
代码运行次数:0
复制
ExecutorService executor = Executors.newFixedThreadPool(1);
Runnable formatConcentration = new formatConcentration(87);
executor.execute(formatConcentration);
System.out.println("Called an instance of formatConcentration");
executor.shutdown();
while (!executor.isTerminated())
{
    //stay Alive
    Thread.sleep(1000);
    System.out.println("Still alive");
}
System.out.println("Program successfully finished");
return;

另一种更简单的方法是:

代码语言:javascript
代码运行次数:0
复制
   ExecutorService executor = Executors.newFixedThreadPool(1);
    Runnable formatConcentration = new formatConcentration(87);
    executor.execute(formatConcentration);
    executor.shutdown();
    try {
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Executor awaitTermination方法替代了您的循环。

票数 0
EN

Stack Overflow用户

发布于 2015-05-15 02:32:27

你从不关机executor。来自isTerminated的Javadocs

如果关闭后所有任务都已完成,则返回true。注意,除非首先调用了isTerminated或shutdownNow,否则shutdownNow永远都不是真的。

只要不关闭executor,就可以向其提交新任务以供执行。isTerminated不检查提交任务的状态,而是检查ExecutorService本身的状态。

票数 2
EN

Stack Overflow用户

发布于 2015-05-15 03:01:06

ExecutorService主要用于将你的工作委托给分离工人。使用此操作,只创建了大多数连接池库。因此,无论何时启动应用程序,并通过应用程序的关闭方法(手动)关闭该服务,都将启动该服务。

在您的程序中,您应该编写一个代码来检查executor服务的状态,

有没有工人正在工作..。如果没有工人处于忙碌状态,那么就停止接受任何进一步的任务。

从javadocs中可以看到示例关闭代码,

以下方法分两个阶段关闭ExecutorService,首先通过调用关机来拒绝传入任务,然后在必要时调用shutdownNow以取消任何遗留的任务:

代码语言:javascript
代码运行次数:0
复制
void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown(); // Disable new tasks from being submitted
   try {
     // Wait a while for existing tasks to terminate
     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow(); // Cancel currently executing tasks
       // Wait a while for tasks to respond to being cancelled
       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
           System.err.println("Pool did not terminate");
     }
   } catch (InterruptedException ie) {
     // (Re-)Cancel if current thread also interrupted
     pool.shutdownNow();
     // Preserve interrupt status
     Thread.currentThread().interrupt();
   }
 }

希望它能给你一些信息。

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

https://stackoverflow.com/questions/30257218

复制
相关文章
javascript将html实体转回
有时候我们可能需要向html中传递html代码。但是因为我们的后台框架使用了laravel。所以我们在赋值的时候就会变成:
魔王卷子
2019/05/31
9780
短实体,长句实体抽取
“半指针-半标注”方法实体的抽取器,基于苏神的三元组抽取方法改造,这里取消了三元组抽取模型中对s的抽取,直接抽取实体并做分类(相当于直接抽取p和o)。改造后的实体抽取方法不仅可以运用于短实体的抽取,也可以运用到长句实体的抽取。
机器学习AI算法工程
2020/09/14
1.9K0
EF实体中的修改
思路:先从ObjectContext取出实体,然后将前台传过来的DTO属性对应赋值到我们的实体上,然后调用ObjectContext的保证修改方法。
跟着阿笨一起玩NET
2018/09/19
1.1K0
springboot 根据实体类生成数据库中表BaseEntity(公共实体)配置文件application.yml 子类实体:
1.标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,但是他的属性都将映射到其子类的数据库字段中。
用户5899361
2020/12/07
5K0
SpringBoot 使用注解将配置文件自动映射到属性和实体类
1. 属性单独映射 ---- 1. Controller上面配置 @PropertySource({"classpath:application.properties"}) 2. 对要配置的属性添加注解 @Value("${web.file.path}") private String filePath; 3. 接口测试 @GetMapping("/test/property-source") public Object testPropertySource() { System.out.print
山海散人
2021/03/03
1.3K0
nginx设置header如果没有值
map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。
十毛
2022/08/23
1.4K0
nginx设置header如果没有值
[NewLife.XCode]实体工厂(拦截处理实体操作)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/07/02
1K0
实体识别(1) -实体识别任务简介
命名实体识别(Named Entity Recognition,简称NER) , 是指识别文本中具有特定意义的词(实体),主要包括人名、地名、机构名、专有名词等等,并把我们需要识别的词在文本序列中标注出来。
致Great
2023/08/25
4910
实体识别(1) -实体识别任务简介
Apple Card实体卡曝光,只有logo没有卡号
在今年3月的春季发布会上,苹果在Apple Pay的基础上推出了信用卡“Apple Card”,就在近日,国外知名数码产品爆料者Ben Geskin在推特上展示了苹果实体信用卡的真面目,从图片上可以看出这款信用卡的设计非常简约,卡面上除了logo就是EMV芯片。
镁客网
2019/05/16
7900
JS魔法堂:再识ASCII实体、符号实体和字符实体
一、前言                                            相信大家都熟悉通过字符实体 &nbsp; 来实现多个连续空格的输入吧!本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢。 二、初识HTML实体                                                                    由于HTML中某些字符是预留的(如>和<等),若要在进行HTML解析出来后能正确显示预留字符,则需要
^_^肥仔John
2018/01/18
2.2K0
实体-联系图(ER图)_实体关系图
我们通常用实体、联系和属性这三个概念来理解现实问题,因此ER模型比较接近人的思维方式。此外,ER模型用简单的图形符号表达系统分析员对问题域的理解,不熟悉计算机技术的用户也能理解它,因此,ER模型可以作为用户与分析员之间有效的交流工具。
全栈程序员站长
2022/09/29
2.3K0
实体-联系图(ER图)_实体关系图
python实现命名实体识别指标(实体级别)
{'ALBUM': [(18, 3)], 'SINGER': [(11, 3)], 'SONG': [(2, 3), (6, 3)], 'TAG': [(23, 3)]}
西西嘛呦
2020/11/12
1.3K0
将实体光盘制作成光盘映像iso文件
春节假期整理历史物件时发现一些书籍的光盘,虽然买了多年但一直没有看过,因为自己在用的电脑都没有光驱。正好老爸的电脑是带光驱的,想着趁过节把这些光盘的内容读取出来存在NAS上方便后续使用。 使用UltraISO软件直接“制作光盘映像文件”就可以将光盘的内容制作成iso文件,便于保存在磁盘等介质上。基本最长的也就是10分钟左右搞定。
Alfred Zhao
2023/02/10
2K0
HTML 字符实体
在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。
用户8442333
2021/08/21
1.7K0
HTML字符实体
刚刚在修改文件的时候,空格怎么都打不上,后来反应过来得使用html字符实体,为了方便自己查找,便有了这篇文章
用砖头敲代码
2022/06/08
1.4K0
组合实体模式
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
Java架构师必看
2020/04/13
4980
JPA实体类中的注解
@Entity   标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类 @Table   标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应,如果是逆向生成表的话就会以简单类名作为表名   如果指定名称,例如@Table(name="tb_user"),就表示映射到数据库中的tb_userz这个表; @Id   标注于属性上,通常是在get方法上,也可以在属性的声明上。   用于表示该属性作为ID主键 @GeneratedValue
二十三年蝉
2018/03/29
3.9K0
EntityFramework附加实体
//0.0创建修改的 实体对象 Models.BlogArticle model = new BlogArticle(); model.AId = 12; model.ATitle = "新的数据"; model.AContent = "新的数据~~~~~"; //0.1添加到EF管理容器中,并获取 实体对象 的伪包装类对象 DbEntityEntry<Models.BlogArticle> entry = db.Entry<Models.BlogArticle>(model); //**如果使用 En
liulun
2018/01/12
7570
实体识别(2) -命名实体识别实践CRF
CRF,英文全称为Conditional Random Field, 中文名为条件随机场,是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔可夫(Markov)随机场。
致Great
2022/03/30
1.7K0
实体识别(2) -命名实体识别实践CRF
选择块参照中嵌套的实体
在利用ObjectARX进行CAD二次开发时,如何选择块参照中嵌套的实体,并进行进行下一步操作?这个问题的难点是:如何判断用户选中的实体到底是块参照里面的非嵌套对象实体?还是块参照中嵌套的块参照的实体?本文利用全局函数acedNEnsSelP解决了这个问题,并可实现:如果用户选择块参照中嵌套的实体,直接视为用户选择了这个嵌套的块参照,效果如图。
用户3519280
2023/07/31
2651

相似问题

无法用python连接到Server

12

用python中的connectorx连接MS SQL Server

216

无法用python连接到Azure Server

20

SQL Server SELECT with READONLY子句

40

用Streamlit编写连接python和Server的函数?

218
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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