在后台运行线程并根据需要将数据传递给线程

时间:2012-08-08 11:53:29

标签: java multithreading servlets

我需要在java的后台运行一个线程,并且可能需要在开始执行其实际功能之前将一些信息传递给线程。

如何实现这个?

其次,是否可以启动进一步操作并退出请求上下文的线程。请注意,我必须在Web应用程序中实现。

3 个答案:

答案 0 :(得分:2)

回答第一个问题的一个例子:

class NewThread extends Thread
{
    public String someInformation;

    @Override
    public void run()
    {
        System.out.println(someInformation);
    }
}

public class YourClass
{
    public void startANewThread()
    {
        NewThread newThread = new NewThread();
        newThread.someInformation = "hello";
        newThread.start();
    }
}

关于你的第二个问题:这个代码应该在web应用程序中运行,但你必须非常小心,确保这些后台线程在某些时候完成,否则这将是一个很好的小内存泄漏。 / p>

请注意,如果您想在两个线程运行时共享信息,则需要同步信息访问。

根据后台线程的作用,使用Quartz

等框架可能有意义

答案 1 :(得分:0)

  

是否可以启动执行进一步操作并退出请求上下文的线程。请注意,我必须在Web应用程序中实现。

您可以使用ExecutorService将任意数量的任务传递给并在完成后关闭。

答案 2 :(得分:0)

尝试使用两个线程的代码块,其中一个线程将在后台运行,另一个线程将开始执行任务。在这里你可以设置一个返回类型,与thread.run()方法不同。

FutureTask<Response> future = new FutureTask<>(newCallable<Response>() {
    public yourreturntype call() {
        doSomething(Thread1);
    }
});

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(future); 
doSomethingelse(Thread2)
//This thread doesnot wait for thread1 to complete