所以我有一个长时间运行的进程,我希望将其封装为Runnable并在线程中调度它。更具体地说,我有一个POST Web服务,它在文件系统中创建一个文件,但是文件的创建可能需要很长时间。
在我的Web服务的资源方法中,我希望能够调度一个线程来创建文件并返回状态200.我不认为我可以只执行Thread.join,因为这意味着当前线程必须等待文件创建线程完成。相反,我想将文件创建线程加入主线程。问题是,如何在java中获取主线程?
答案 0 :(得分:4)
我不确定我是否帮助你。以下是我的理解:
您想要执行可能长时间运行的操作(文件创建) 您不希望服务方法在该任务被执行时阻止 您希望在一个线程中执行的任务存在于单个请求的边界/生命周期之外。
到目前为止我是对的吗?
如果你真的建议你查看java.util.concurrent中的新概念。那里描述的概念应该给你enogh信息解决这个
基本信条:不要在线程中思考,在任务中思考。
一般书籍推荐:Brian Goetz的Java Concurrency in Practice
答案 1 :(得分:1)
您需要异步处理请求。将创建一个单独的线程来执行繁重的工作,请求接收线程将可以自由处理其他请求。请查看以下文章。
答案 2 :(得分:0)
当你产生文件创建线程时,你需要将它传递给父线程的某种引用,以便它可以回传(即你提供了一些启用回调的东西)。
这可能是实际的Thread对象(使用Thread.currentThread获取,正如有人在评论中所说)或用于在文件创建线程完成时发出信号的其他对象。