- 浏览: 2077871 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (366)
- hadoop (91)
- DB (2)
- vmware (0)
- python (49)
- Java (72)
- Linux (57)
- 多线程 (2)
- hive (1)
- hbase (3)
- mongodb (5)
- Hibernate (3)
- nodejs (1)
- 模式与重构 (1)
- 持续集成CI (4)
- Mysql (2)
- chorme (1)
- 软件开发 (0)
- 敏捷 (5)
- maven (3)
- windows (7)
- 测试驱动 (1)
- scala (3)
- Jetty (0)
- android (1)
- eclipse (1)
- 设计模式 (1)
- 面向对象设计 (2)
- oracle (3)
- cassandra (15)
- pig (3)
- rails (1)
- redis (4)
- ruby (1)
- storm (0)
- 实时运算 (3)
- scribe (1)
- hadoop源码 (3)
- cassandra jna (1)
- Kafka (2)
- Sublime (2)
- C++ (2)
- C (1)
- 版本控制 (1)
- 服务器 (1)
- docker (0)
- flink (1)
最新评论
-
伍大都督:
解释太到位了,感谢分享
理解Linux系统中的load average(图文版) -
rfjian123:
非常感谢,用你的方法解决了问题。
Server sent unexpected return value (403 Forbidden) in response to OPTIONS -
yuhaifei12:
今天遇到同样的问题了。设置的是每分钟执行一次。结果发现每分钟执 ...
解决Linux下crontab同一时间重复执行问题 -
BigBird2012:
想问一下,使用ExecutorService每次都要调用 sh ...
spring quartz使用多线程并发“陷阱” -
zhuqx1130:
有用,谢谢
解决Sublime Text 3中文显示乱码(tab中文方块)问题
定义一个job:ranJob,设置每秒执行一次,设置不允许覆盖并发执行
<bean id="rankJob" class="com.chinacache.www.logstat.job.RankJob" /> <bean id="rankJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="rankJob" /> <property name="targetMethod" value="execute" /> <property name="concurrent" value="false" /> </bean> <bean id="rankJobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="rankJobDetail" /> <!-- 单位 ms,半小时 1800000 ms --> <property name="repeatInterval" value="1000" /> </bean>
job代码:
System.out.println("Start job"); ExecutorService exec = Executors.newFixedThreadPool(1); Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("thread start"); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("thread end"); } }); exec.execute(thread); System.out.println("end job");
程序输出结果:
Start job end job thread start Start job end job thread start Start job end job thread start Start job end job thread start thread end
从结果可以看到,job的并发覆盖配置似乎根本没有生效,原因是:job没有关注多线程执行情况
修改job代码,添加如下代码在job访问最后,线程处理完job才结束,
while (!exec.isTerminated()) { // 等待所有子线程结束,才退出主线程 }
修改代码后程序结果:
Start job thread start thread end
可以看到job始终没有结束,说明ExecutorService始终没有终止,看看文档,加入shutdonw()方法,job所有代码如下:
public void execute() throws InterruptedException { System.out.println("Start job"); ExecutorService exec = Executors.newFixedThreadPool(1); Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("thread start"); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("thread end"); } }); exec.execute(thread); exec.shutdown(); while (!exec.isTerminated()) { // 等待所有子线程结束,才退出主线程 } System.out.println("end job"); }
打印结果如下:
Start job thread start thread end end job Start job thread start thread end end job Start job thread start thread end end job
OK,至此spring quartz多线程并发问题解决。回顾下,我们要使用isTerminated()方法等多线程结束后在结束job;多线程任务派发结束后,要使用shutdown()方法顺序关闭线程(等待正在执行任务,不接受新任务)
评论
1 楼
BigBird2012
2016-06-16
想问一下,使用ExecutorService每次都要调用 shutdown?我的理解是给线程分配的任务执行完了线程就会释放,处于空闲状态,等待新的任务,shutdown 是不是将整个线程池关闭了呢?
发表评论
-
shell下使用log4j 1.x “No appenders could be found for logger”问题两个处理办法
2018-05-25 23:25 1564错误: log4j:WARN No appenders c ... -
通过java class文件确定其编译器版本
2016-06-23 10:45 1025方法一: hexdump -C XXX.class ... -
字符编码笔记:ASCII,Unicode和UTF-8(转)
2014-11-06 17:29 1194今天中午,我突然想搞 ... -
Server sent unexpected return value (403 Forbidden) in response to OPTIONS
2014-10-10 15:01 5493之前用的好好的,忽然某天再次svn up时候就报下面的错误: ... -
netbeans下优秀sublinme主题
2014-09-29 10:13 3575推荐站点:http://netbeansthemes.com ... -
将netbeans项目放到jenkins上做持续集成
2014-07-25 15:20 1190netbeans项目本质是通过ANT来管理的,只不 ... -
关于jvm中Xmx参数默认值
2014-05-08 09:19 1954我的机器win7 64bit 8GB内存,通过jconso ... -
Eclipse代码自动完成功能无法使用问题记录
2014-04-28 10:15 1086使用Alt+/无法补齐Java代码,现象时没有反应。解决方 ... -
thrift0.9.1简单教程(包含Java服务端和Java、python客户端)
2014-04-25 15:55 6347一、Thrift Java服务端和客户端 官 ... -
使用sublime text3开发scala
2014-04-04 16:49 3706打开菜单栏Tool->build system-> ... -
netbeans下打开本地文件夹插件(explorer)
2014-04-02 14:44 19801. 在线安装 工具->插件->可用插 ... -
关闭Sublime自动更新
2014-03-09 21:42 758每次启动都提示更新,可以关闭它。 找到Prefere ... -
使用log4j.properties配置slf4j输出LOG
2014-01-09 08:57 6593完成配置需要以下文件: slf4j-log4j12-x ... -
正确使用java -cp通配符
2013-11-21 17:05 10102JDK6支持java -cp后面跟通配符'*',试了一下发 ... -
强制Java使用东八时区方法
2013-11-15 15:37 1791今天线上有台服务器时区错误,导致很多使用new Da ... -
谨慎使用java的PrintWriter类
2013-10-23 12:31 1320public void test() throws Fil ... -
记录Java ShutdownHook
2013-08-30 11:40 1037public class TestMe { stat ... -
eclipse + maven + jetty + spring web 开发环境简要笔记
2013-08-27 11:25 1563环境准备 确保安装maven3 确保安装eclip ... -
Eclipse(IDE for Java Developers)、maven、jetty、spring web集成
2013-08-27 08:53 0方法一: http://wiki.eclipse.o ... -
关于数据压缩
2013-08-23 14:26 1093常用压缩 quicklz zlib snappy/ ...
相关推荐
各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定 用户解锁任务。对于一个典型的MIS系统来说,在每月1号凌晨统计上...
spring的quartz使用实例,spring的quartz使用实例
这个是spring 和 quartz的集成,quartz是单独的包,java线程的方式运行,利用自定义Jobfactory来解决spring注入service空指针的问题,简单实例执行main方法即可,很实用
Quartz使用StdSchedulerFactory(调度器工厂)实现多线程原理,可以自定义线程个数来实现不同的需求,代码中有详细注释说明
spring quartz类全包spring quartz类全包
spring整合quartz使用jdbc存储任务,并配置为quartz集群应用
java中spring quartz定时任务demo,里面包含项目所需的quartz.jar, spring.jar包,配置文件等,可直接运行使用
spring quartz
Spring+Quartz定时任务Demo,导入工程就能直接运行,applicationContext.xml设置定时任务触发器
Spring Quartz如何动态配置时间
Spring Quartz定时任务 jar包
spring注解Quartz定时执行功能
spring集成quartz使用需要的jar包下载。
Spring Quartz 定时器示例(Web工程版),欢迎下载。
spring+quartz demo,下载后即可运行,很强大哦....
利用spring的Quartz做任务调度所需要的所有jar包
关于spring中quartz的配置
应对不同版本的spring 与quartz定时任务创建所需要的不同的jar包
Java_Spring与Quartz的整合
spring quartz 相关文档