在web项目中能初始化一个线程池等待并处理长时间任务吗

发布于 2021-11-19 09:13:56 字数 261 浏览 949 评论 5

一个web项目,有一些需要长时间执行的任务,用了ssh架构

我请求一个action后,先是更新数据库,然后就是一个要执行一分钟左右的一个任务,这样前台就需要等很久,我希望更新数据库后马上返回,那个任务还在后台执行。我觉得创建一个线程来执行那个任务是可以实现的,但现在我希望在web项目运行的时候就初始化一个线程池,然后action中只需要创建一个线程,扔到里面执行就可以了。可以实现这样的机制吗?

或者是不初始化线程池,用spring的面向切面编程能不能简单的实现

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

坚持沉默 2021-11-20 23:36:21

不是凭空想的呀 我用lucene对数据库建了索引 我现在在页面建了一个类别根据关键词搜索出一系列文章 然后把文章和类别的关系写到数据库 这个是由一个线程执行的 我自己写了个线程池 已经可以完成任务了 就向异步调用一样

尐偏执 2021-11-20 20:46:48

不知道用在什么场景,是你凭这想你出来的吧,要是我来做。
web将耗时任务(一条记录)写到一个任务表中,置flag为NOT_START

然后写一个单独的后台程序也许有界面,通常情况下是没界面, 定时从任务表中取FLAG!=complete任务执行。
执行前置flag为processing执行成功后置flag为complete,如果失败置任务为failed.

你在web中new一个thread太理想化,又比较麻烦。执行时出错了怎么办.和web的功能混在一起出错了都不好调试

勿忘初心 2021-11-20 18:51:25

刚刚弄个例子给你看看:

线程类:

public class ProcessThread implements Runnable {
	@Override
	public void run() {
		System.out.println("我睡着了……");
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
		}
		System.out.println("我睡醒了……");
	}
}

Action:

public class ProcessAction {
	public static void main(String[] args) {
		System.out.println("工作开始……");
		Thread t = new Thread(new ProcessThread());
		t.start();
		System.out.println("工作结束……");
	}
}

结果:

工作开始……
工作结束……
我睡着了……
我睡醒了……

路还长,别太狂 2021-11-20 16:17:25

刚刚弄个例子给你看看:

线程类:

public class ProcessThread implements Runnable {
	@Override
	public void run() {
		System.out.println("我睡着了……");
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
		}
		System.out.println("我睡醒了……");
	}
}

Action:

public class ProcessAction {
	public static void main(String[] args) {
		System.out.println("工作开始……");
		Thread t = new Thread(new ProcessThread());
		t.start();
		System.out.println("工作结束……");
	}
}

结果:

工作开始……
工作结束……
我睡着了……
我睡醒了……

伴我心暖 2021-11-20 09:54:49
应该不用到线程池的
就是开启一个线程去执行你的长任务就可以了

action的方法
1.更新数据库
2.执行长任务的线程.start();
3.返回

理论上就可以了
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文