jfinal afterJFinalStart中执行长久循环操作的解决方案:创建新线程

很多时候,需要在jfinal中afterJFinalStart方法中,写一些需要一直循环运行的程序,做一些循环操作。但是在afterJFinalStart中,执行时间过长的话,会导致整个站点启动超时。

解决方案是,新建一个新的线程,在afterJFinalStart中启动即可:

 1 package com.thread;
 2
 3 import com.activeMQ.ActiveMQHelper;
 4 import com.demo.testSpring.Animal;
 5
 6 /**
 7  * 新创建线程,用于接受消息,并对应操作
 8  * @author czg
 9  *
10  */
11 public class worker extends Thread{
12
13     public void run() {
14         String msg;
15         ActiveMQHelper activeMQHelper=new ActiveMQHelper("tcp://localhost:61616?wireFormat.maxInactivityDuration=0",2000);
16
17         while(true){
18             msg=activeMQHelper.receiveMessage("hello");
19             if(!msg.equals("EOF")) System.out.println(msg);
20
21         }
22     }
23 }

线程实现

1 @Override
2     public void afterJFinalStart(){
3
4         Thread workerThread = new Thread(new com.thread.worker());
5         workerThread.start();
6     }

线程启动

时间: 2024-11-05 12:08:29

jfinal afterJFinalStart中执行长久循环操作的解决方案:创建新线程的相关文章

Android-Service中执行新线程的几种方式

大家都知道,service和activity都是运行在UI线程中,超时的数据读取和网络耗时等操作必须新建线程,下面说说service中执行新线程的几种方式. 1.传统的java方式 我们都知道 java中新建线程可以继承Thread类,也可以implement Runnable接口.实质都是实现Runnable的run方法,此处底层应该是jvm识别run这个方法分配并且创建了线程.run方法只是准备好了新线程的资源,要调用 start() native方法才能启动线程. 1 public int

iOS中UITableViewCell的重用问题解决方案

UITableViewCell重用 为了能够保证tableViewCell能够高效的执行,Objective-c中引进了重用队列的机制,重影现象也是在重用队列时经常遇到的问题,那么如何解决这个问题呢?下面给出了几种解决办法. 第一种解决方法 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSArray *subViews = cell

MVP 2015社区大讲堂之:在ASP.NET应用中执行后台任务

昨天下午,在微软的MVP 2015社区大讲堂上给大家分享了一个题目:在ASP.NET应用中执行后台任务.这是一点都不高大上,并且还有点土气的技术分享.不过我相信很多人都遇到过这样的问题. 虽然是一个很简单的技术,不过来课堂上听讲的同学还是很多,在此再次感谢大家的捧场. 在这个分享中我主要介绍了三种解决方案: QueueBackgroundWorkItem Hangfire Azure WebJobs 也同步演示了这三种方案的基本用法,但是由于是现场演示,所以代码的讲解都是一笔带过.不过还算这三个

在sqlite中执行'in'查询操作,如何使用selectionargs匹配多个值

在安卓开发中,经常使用到sqlite作为本地持久化存储的解决方案.在androidSDK中,已经为我们提供了各种各样的增.删.改.查的api,尽管我们可以自己写sql语句然后执行db.rawsql(sql,null)方法,但这种方法有一些风险,那就是拼接的关键字有可能是非法的,这样会造成很多意想不到并且很危险的后果.因此,建议使用sdk提供的api来做数据库操作,android已经为我们屏蔽了这一层风险. 在使用sqlite查询时,我们经常会使用"in"操作符来进行查询,如 selec

[PY3]——怎样在数据字典中执行一些计算操作(比如求最大值、排序等)

问题 怎样在数据字典中执行一些计算操作(比如求最小值.最大值.排序等等)? 解决方案 zip( ) 1. 为了对字典值执行计算操作,通常需要使用 zip() 函数先将键和值反转过来 2. 类似的,也可以使用 zip() 和 sorted() 函数来排列字典数据 prices = { 'ACME': 37.20, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75 } print(min(prices),max(prices)) #直接

[译]通过存储在 64bit 环境中执行32 bit的SSIS包

最近碰到了一个众所周知的32bit的 SSIS 包在64bit的SQL Server环境的执行问题. 我看了一些解决方案,比如修改在SSDT里面修改 debug 选项(Run64BitRuntime = false) 或者建立一个job执行的时候强制以32bit方式运行. 不过我发现这些方式并不合适大型的自动化环境. 你可能在测试SSIS包的候会用这些方法 ,但是你部署到SSIS服务器的时候不一定想要这么做. 我想还有一个方法就是建立一个job, 强制包为32bit执行模式.然后建立一个脚本更改

在Web应用程序中执行计划任务(多线程)

在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务.实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程来实现,也可以采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是很好的解决方案.但是,对于Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务,或者需要你支付许多额外的费用. 本文就介绍

.net(C#)在Access数据库中执行sql脚本

自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 1 /// <summary> 2 /// 执行sql语句 3 /// </summary> 4 /// <param name="sql">需要执行的sql语句</param> 5 public bool ExecuteSql(string sql, ref string errorMsg) 6 { 7 Se

C# Winform中执行post操作并获取返回的XML类型的数据

/// <summary> /// 返回指定日期的订单数据 /// </summary> /// <param name="StartDate">起始日期</param> /// <param name="EndDate">结束日期</param> /// <returns>DataTable</returns> public System.Data.DataTable