2010-05-10 178 views
5

我想知道哪个是最有效的方法来实现java中的某种背景任务(我猜这会是某种非阻塞的线程)。更确切地说 - 我有一些java代码,然后在某个时候我需要执行一个长时间运行的操作。我想要做的是在后台执行该操作,以便该程序的其余部分可以继续执行,并在该任务完成时只更新某个特定的对象。这个改变会被其他组件检测到。java后台任务

回答

2
+1

是的,这是我正在寻找的,更具体的执行者,..谢谢。 – markovuksanovic 2010-05-10 20:23:41

+0

你可以提出一个关于执行者的回答吗?我正要问一个非常类似的问题。我认为应该提及执行者作为具体答案。我会给它一个upvote。我不想回答点窃取。 特别是因为JEE不鼓励新线程的产生。 – Wes 2010-07-31 14:04:34

-1

天真的想法:你也许可以创建线程,给它一个低优先级,并做一个循环:

  • 使用产量或睡眠让其他线程做的工作
  • 一点点在parrallel工作

这将取决于你真正想要在你的线程做

6

你想使一个新的线程;根据该方法需要多久是,你可以把它内联:

// some code 
new Thread(new Runnable() { 
    @Override public void run() { 
     // do stuff in this thread 
    } 
}).start(); 

或者只是做一个新的类:

public class MyWorker extends Thread { 
    public void run() { 
     // do stuff in this thread 
    } 
} 

// some code 
new MyWorker().start(); 
+0

在这里不可能长时间运行的线程会抢占CPU而不会让其他线程运行吗? – phtrivier 2010-05-10 16:39:32

+0

在JEE中不鼓励创建新的主题。 – Wes 2010-08-20 23:30:05

-1

是的,你会想离旋转操作在它自己的线程上。如果您不小心并且意识到这意味着什么以及资源如何相互作用,那么添加新线程可能会有点危险。这是一个很好的introduction to threads来帮助你开始。

0

让一个线程。将该线程标记为守护进程。当运行的唯一线程都是守护进程线程时,JVM退出。