如何在java中获取主线程?

时间:2011-05-31 18:50:49

标签: java thread-safety

所以我有一个长时间运行的进程,我希望将其封装为Runnable并在线程中调度它。更具体地说,我有一个POST Web服务,它在文件系统中创建一个文件,但是文件的创建可能需要很长时间。

在我的Web服务的资源方法中,我希望能够调度一个线程来创建文件并返回状态200.我不认为我可以只执行Thread.join,因为这意味着当前线程必须等待文件创建线程完成。相反,我想将文件创建线程加入主线程。问题是,如何在java中获取主线程?

3 个答案:

答案 0 :(得分:4)

我不确定我是否帮助你。以下是我的理解:

您想要执行可能长时间运行的操作(文件创建) 您不希望服务方法在该任务被执行时阻止 您希望在一个线程中执行的任务存在于单个请求的边界/生命周期之外。

到目前为止我是对的吗?

如果你真的建议你查看java.util.concurrent中的新概念。那里描述的概念应该给你enogh信息解决这个

基本信条:不要在线程中思考,在任务中思考。

一般书籍推荐:Brian Goetz的Java Concurrency in Practice

答案 1 :(得分:1)

您需要异步处理请求。将创建一个单独的线程来执行繁重的工作,请求接收线程将可以自由处理其他请求。请查看以下文章。

答案 2 :(得分:0)

当你产生文件创建线程时,你需要将它传递给父线程的某种引用,以便它可以回传(即你提供了一些启用回调的东西)。

这可能是实际的Thread对象(使用Thread.currentThread获取,正如有人在评论中所说)或用于在文件创建线程完成时发出信号的其他对象。