Java中有多个线程在执行任务,这时候关闭Tomcat,线程任务会立即结束么?

Java中有多个线程在执行任务,这时候关闭Tomcat,线程任务会立即结束么?在这种情况下,自己创建的线程和线程池会有所区别么?

1

4个回答

这就像你的手机关机了还能听电话吗

1

自己创建的线程需要你去通知他退出,做各种清理工作
线程池的话,一般提供shutdown()等API,你可以直接调用它,由它来 通知线程退出等。

0
stone_yw
淹不死的水 如果没有调用shutdown,tomcat应该会等线程执行完成后才会关闭的吧?
5 个月之前 回复

容器关闭后,线程池都会立即关闭,没有区别。

0

应该不会立即结束,会等所有非守护线程执行完毕后才会关闭的。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JAVA线程池原理源码解析—为什么启动一个线程池,提交一个任务后,Main方法不会退出?
  public static void main(String[] args) { ExecutorService service = Executors.newFixedThreadPool(10); service.submit(() -> System.out.println("Hello ")); System.out.pr...
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
看到一个博客,如下 [url=http://bbs.csdn.net/topics/390268738]Java多线程-线程池ExecutorService.shutdown什么时候执行[/url] 其中问题: ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭。 但是我用了计数信号量Semaphore后,发现线程还没有跑完,他就执行了shutdow...
Java并发编程——线程池的使用(三)线程池执行任务、取消任务
一、线程池执行Runnable任务 executor.execute(runnable) executor.execute(new Runnable() { @Override public void run() { System.out.println("执行任务"); }
Java并发:终止线程和关闭线程池
一、任务的取消1.1标志位class ThreadOne implements Runnable { public volatile boolean isComplete = false; @Override public void run() { while(!isComplete) { } } }这种方
使用线程池时候当程序结束时候记得调用shutdown关闭线程池
3.10 使用线程池时候当程序结束时候记得调用shutdown关闭线程池日常开发中为了便于线程的有效复用,线程池是经常会被用的工具,然而线程池使用完后如果不调用shutdown会导致线程池资源一直不会被释放。下面通过简单例子来说明该问题。3.10.1问题复现下面通过一个例子说明当不调用线程池对象的shutdown方法后,当线程池里面的任务执行完毕后主线程这个JVM不会退出。public class...
多线程Runnable任务执行注意
public class ImplRunnable implements Runnable { String thread_name; int line = 10;//关键的共享变量 @Override public void run() { synchronized (this){//确保每个任务只执行一次 for(;0 < line;line--) System.o...
Timer&TimerTask在主线程中调用导致程序无法终止
如题,明明在该结束Time陷阱的时候加了cancel(),但是还是不能结束,试了一下,可利用System.gc()//加在cancel()后面!!!!!
Java的多线程终止,守护线程
Java中线程分为两种类型:用户线程和守护(服务)线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.setDaemon(true)设置为守护线程;不设置则默认为用户线程。 结束单线程用 Thread.interrupt() 方法,多线程结束则需要设置守护线程。当不存在用户线程时,守护线程就会全部终结(可以理解为:守护线程是服务线程,用户线程是被服务线程,用户
Java多线程任务超时结束的5种实现方法
在用Java编写并发程序时,往往会碰到某个线程因计算量大或因阻塞而一直处于无响应的情况,我们可能会等的不耐烦(也可能是不想让它占用太多资源)想及时终止掉它,那就需要用到任务超时结束的技巧了。在刚接触到多线程时,我本以为API会提供这样一个多线程类:Thread(Runnable r, long timeout) ,第二个参数用来设置超时时间,可事实并非如此。因为这样的类不具有通用性,面向对象设计语言
interrupt能停止线程吗?
答案是不确定,得看情况,看这段测试代码 /** * Created by chen on 2018 */ public class MyThread extends Thread { private static final String TAG = "duo_shine"; @Override public void run() { for (int...
tomcat关闭后线程无法终止
Web应用的后台Java程序中用Timer().schedule()方法定时的开启线程并执行,关闭tomcat服务后,仍然按照前面设置的时间频率开启线程,并向tomcat的输出日志文件中输出   tomcat容器只是按照Java EE规范来管理应用中标准组件的生命周期,但自己创建出来的资源要记得自己负责处理,容器是不会替你管理的。JVM中,所有的非守护线程都停止了,JVM才能正常停止。   ...
Java实现终止线程池中正在运行的定时任务
源于开发 最近项目中遇到了一个新的需求,就是实现一个可以动态添加定时任务的功能。说到这里,有人可能会说简单啊,使用quartz就好了,简单粗暴。然而quartz框架太重了,小项目根本不好操作啊。当然,也有人会说,jdk提供了timer的接口啊,完全够用啊。但是我们项目的需求完全是多线程的模型啊,而timer是单线程的,so,楼主最后还是选择了jdk的线程池。 线程池是什么 Java通过E
java 多线程管理线程任务,根据优先级执行 任务超时管理 线程同步执行管理
需求 需要根据优先级执行任务,有任务不是特别重要,可以稍后执行;需要对正在执行的线程做超时监控;有的API依赖任务返回结果,线程池执行的时候任务也支持同步任务; 简单测试 创建一个使用支持优先级队列(new PriorityBlockingQueue<>() )的线程,然后每个任务实现 java.lang.Comparable 接口 new ThreadPoolExecutor...
容器(tomcat等)关闭后,由于守护线程线程池等线程无法销毁,导致容器关闭失败
草稿:1 如何找出某个进程下资源消耗最大的线程2 如何使用jstack根据线程查询对应的功能类3 销毁“僵尸”线程的两种方式:1 jvm关闭,关闭钩子 Runnable.addShutdownHook 2 容器销毁时关闭 3 spring的DisposableBean 4 使用钩子的注意事项...
main线程终止时其中的子线程也不会终止
Java中main线程只是一个用来启动应用程序的普通非守护线程,main线程终止时其中的子线程也不会终止不防来做个实验:上述一个main主线程里面产生了两个子线程,内容为打印当前线程的名字,当输出  main is over  说明main线程即将终止运行结果如下:如此说明:main线程终止后其中的子线程也正常进行...
Java线程池任务执行完毕后回收线程
Java线程池任务执行完毕后回收线程 线程池中的所有任务执行完毕后,线程并没有停止,导致JVM出现OOM问题。后来查找了下面链接的资料,解决问题。 ref: http://www.cnblogs.com/pengineer/p/5011965.html 问题及现象: public static void main(String[] args) { BlockingQueue queu...
ExecutorService 关闭 and 如何判断线程池中任务执行完毕
ExecutorService 关闭shutdown shutdownNow awaitTermination当你使用ExecutorService的时候,你应该记得关闭它,这样这些被管理的线程才会停止运行。举例:如果你的应用通过main()方法启动,并且你的 应用中存在一个 激活的 ExecutorService,那么即使你的main thread(main线程)已经退出了,这个应用依然会在后台...
线程按次序执行队列任务
package demo; import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.CountDownLatch; public class ThreadOrder { static class TaskProcess implements Runnable { p
Guava ListenableFuture 实现多线程 先执行完线程任务 ,再来执行主线程
package ListenableFuture; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import com.google.common.collect.List
关于使用线程池造成tomcat进程无法正常退出的一点思考
最近在项目中使用了多线程生产者消费者模型来模拟消息队列处理问题,但是发现在要求线程退出时,由于没能处理好退出线程的操作造成了Tomcat进程无法停止的问题。经过一番折腾后想总结一下这方面的经验。 线程中断的方式常用的有两种,一种是使用标记位,在代码执行中通过对标记位的判断来决定是否应该退出线程的执行;另一种是使用Thread类的interrupt方法,来终止线程。 因此,刚开始时,我便采用第二
Jenkins:解决tomcat在job结束时关闭问题
使用jenkins的批处理或者ant 启动tomcat失败。查了一下原因说是 jenkins在脚本执行结束后,就认为任务结束了,但是脚本启动的相关子程序仍然在运行。由于jenkins认为任务已经结束了,就结束了该构建相关的子进程。
正确实现子线程任务全部完成后主线程关闭的四种方法
方法一 Thread.sleep 方法二 ExecutorService 方法三 thread.join 方法四 Thread.yield and Thread.activeCount 写代码过程中遇到了这样的场景, 需要观察各个子线程运行的情况, 如果不进行任何处理当main 方法运行完毕后其他子线程都会关闭, 无法观察到所有子线程的详细的运行情况, 于是需要让主线程等待...
关于Spring容器中定时器到时执行会出现两个线程同时执行的问题
quartz定时器同时执行两次,多线程同时执行
多任务并发:如何判断线程池中的任务都已经执行完毕?
前言: 多线程并发,我们往往采用线程池来管理并发的线程。但是,我们往往有这样的需要:要求在线程池中的任务都完成后才能执行后续的任务,或者需要任务都完成后释放资源或向数据库写入状态。这些都需要我们判断线程池的任务是否都已经完成。 判断线程池中的任务是否全部完成,方式有不少,这里我来整理一下。 一、使用线程池的原生函数isTerminated(); 优点:操作简便; 缺点:需要主线程阻塞; execu...
rt-thread 与 ucos 中任务退出时如何调用退出函数
rt-thread与ucos中任务退出时如何调用退出函数 rt-thread与ucos中都提供了删除任务的函数,同时系统也支持任务正常终止。相较于死循环的任务执行函数,这是一大改进。 任务的创建很容易,也不易产生问题。任务的销毁却十分不易,任务占有资源的释放更是令人头疼。以前我一直调用系统提供的删除任务的函数强制删除任务,这在大多数时间并没有造成太大的问题,但这样的方式其实不太合理。 任务删除时必...
Future方式中断线程实现
java future方式实现线程中断
Java多线程交替执行任务
一:问题描述          生活中很多事情都是有顺序的交互进行着,比如100个人去做地铁,安检的只负责安;只有安检通过了,才能排队刷卡进站;进站了,在对应线路站下排队才能进站。这就是一个典型的多任务有顺序的进行。对于每一个人来说都有顺序要经过这几步。         我们可以通过程序简单的抽象成,使用三个线程,每个线程分别只打印A、B、C. 依次打印出十组ABC. 二:实现思路:
一个线程执行多个任务,要按照顺序执行
一个线程执行多个任务,要按照顺序执行import java.util.concurrent.ArrayBlockingQueue;/** * 一个线程执行多个任务,要按照顺序执行,怎么去实现? * 分析: * 多个人任务-->线程 * 要按照顺序执行--》就需要排队,那就是队列 * 一个给任务,一个执行任务--》涉及一个生产一个消费 * 过渡:需
Java等待线程池终止
1、轮询isTerminated: while (!service.isTerminated()) { TimeUnit.SECONDS.sleep(1); } 2、轮询awaitTermination: while (!service.awaitTermination(1, TimeUnit.SECONDS)) {...
Java多线程——获取多个线程任务执行完的时间
问题最近我在处理一批数据,用多线程来处理,我想知道大概多久能处理完。比如我先用多线程处理 100 条数据,统计下用时,然后根据总的数据量就可以大概估算出处理完这批数据要多久。使用 CountDownLatch 计时思路:用两个 CountDownLatch 倒计时锁:开始计时锁,任务结束计时锁。开始计时锁在子线程任务开始时通过 await() 阻塞所有子线程,然后在主线程中通过 CountDownL
定时线程池执行任务时任务执行时间与定时关系
当执行时间小于定时时间的时候: System.out.println("执行的时间小于设定的周期"); ScheduledExecutorService service = Executors.newScheduledThreadPool(1); service.scheduleAtFixedRate(new Runnable() { @Override public voi...
ScheduledExecutorService:多线程任务调度
今天使用Timer实现任务调度时,阿里巴巴Java开发规范提示 多线程并行处理定时任务时,Timer运行多个TimeTask时,只要其中之一没有捕获抛出的异常,其它任务便会自动终止运行,使用ScheduledExecutorService则没有这个问题。  建议多线程-任务调度,使用如下方式: 首先引入commons.lang3的jar包 <!-- https://mvnrepos...
java 多线程 执行完成 退出 关闭
teger threadNum = new AtomicInteger(0);   每个线程执行完 了 记录一个标记 es.shutdown(); 这个只能让线程池退出,并不能让 主线程推出,所以这里要给一个  next  标记,当线程池 关闭之后,告诉主线程,  这是主线程  继续向下执行;   ExecutorService es = Executors.newFixedThreadPool(THREAD_NUM);     for (int i = 0; i < THREAD_N
多线程: Java使用ThreadPoolExecutor类执行多线程并发任务
import java.util.concurrent.*; /** * 线程池测试类 */ public class ThreadPoolTest { /** * 多线程的任务类 */ static class Task implements Runnable{ //线程id private int id; ...
java线程取消与关闭
java线程取消与关闭java并未提供任何机制来安全的终止线程。但它提供了中断,这是一种协作机制,能够使一个线程终止另外一个线程的当前工作。任务取消在java中没有一种安全的抢占式方法来停止线程,因此也就没有一种安全的抢占式方法来停止任务。只有一些协作的机制,使请求取消的任务和代码都遵循一种协商好的协议。方法一:设置某个“已请求取消”标志,任务定期检查该标志。具体实现上,一般通过一个volatile
ios-设置线程满足某个条件销毁
有的时候我们可能会用到NSThread来进行创建线程然后去执行任务,但是如果我们想让一个任务在执行之后可以再接下去执行下一个任务的话。如果前一个任务执行的够快的话,这个线程就会被销毁了,我们应该如何去保证这个线程去保留下来。这个时候我们就应该去从Runloop着手,因为主线程之所以一直不销毁就是因为有Runloop的存在。所以我们也可以从这方便着手,代码如下所示。 首先先设置一个标记属性就是标记
Java 线程调用start()后会立即执行run()方法吗?
别想当然 问题 Java 线程调用start()后会立即执行run()方法吗? 我们在开发中,经常和线程打交道,有些东西总是司空见惯,想当然地认为某些事情理所当然... 但是今天偶然发现一个有趣的现象: class Test { public static void main(String[] args) { Sys...
Activity关闭子线程是否随着关闭?
问题:在开发中遇到关闭一个页面(Activity),里面的线程是否随着关闭? 回答:不会(经过测试) 当在开发中遇到需要在activity关闭的时候关闭线程时: 1.可以在线程的Run方法里面设置标记手动关闭. (使用停止的标记位,那么可以保正在真正停止之前完整的运行完) 2.调用Thread.stop()方法也可以,但是会出问题(使用Thread.stop方法停止线程,不能保证这个线程是
"Tomcat+Spring+Quartz"解决方案下,关闭Tomcat出现"线程未关闭,出现内存泄漏"错误
使用"Tomcat+Spring+Quartz"解决方案,在关闭Tomcat时出现如图1所示错误信息: 这里使用的Tomcat版本为6.2.32,Spring版本为3.2.3,Quartz版本为1.8.6 一、原因分析 在"Tomcat+Spring+Quartz"的解决方案中,Tomcat在运行的时候,Spring中配置的Quartz SchedulerFactoryBea
线程池程序不会结束与shutdown有关
使用线程池时,在main完成之前没的调用shutdonw使得,java进程不会结束。线程池默认的线程不是“守护线程”,线程池的timeout 大于 0时,code数量的线程是不会终止的。所以,当所有任务完成后,java程序不会结束。 ExecutorService.shutdown()将使之前通过Executor.execute()提交的任务运行结束后关闭线程池。Executor...