如何在java中调用Method作为后台进程

时间:2013-08-06 19:13:59

标签: java multithreading parallel-processing

在我的应用程序中,当用户登录时,我有这个逻辑,它将使用用户拥有的所有符号调用下面的方法。

public void sendSymbol(String commaDelimitedSymbols) {
        try {
            // further logic
        } catch (Throwable t) {

        }
    }

我的问题是,由于这个发送符号的任务可以缓慢完成但必须完成,所以无论如何我可以将其作为后台任务吗?

这可能吗?

请分享您的观点。

6 个答案:

答案 0 :(得分:6)

这样的东西就是你要找的东西。

    ExecutorService service = Executors.newFixedThreadPool(4);
    service.submit(new Runnable() {
        public void run() {
            sendSymbol();
        }
    });

创建执行程序服务。这将保留一个线程池以供重用。比每次异步方法调用每次创建新线程更有效。

如果您需要对ExecutorService进行更高程度的控制,请使用ThreadPoolExecutor。至于配置此服务,它将取决于您的用例。你多久调用一次这种方法?如果经常,您可能希望至少在池中保留一个线程。我最多不会超过4或8。

由于你每半秒只调用sendSymbol一次,因为sendSymbols不是一个非常耗时的例程,所以一个线程应该足够多。我会配置一个固定的线程池与1个线程。您甚至可以重用此线程池来提交其他异步任务。

只要你提交的内容太多,当你致电sendSymbol时就会有回应。

答案 1 :(得分:1)

没有真正简单的解决方案。基本上你需要另一个运行该方法的线程,但你还需要关心同步和线程安全。

new Thread(new Runnable() {

public void run() {
     sendSymbol(String commaDelimitedSymbols);
    }
}).start();

也许更好的方法是使用Executors

但是你需要了解线程安全性。这不是一项简单的任务。

答案 2 :(得分:1)

确定有可能。线程是走到这里的方式。在Java中,您可以启动像这样的新线程

Runnable backGroundRunnable = new Runnable() {
    public void run(){
         //Do something. Like call your function.
    }};
Thread sampleThread = new Thread(backGroundRunnable);
sampleThread.start();

当你调用start()时,它会启动一个新线程。该线程将开始运行run()函数。当run()完成时,线程终止。 请注意,如果您使用swing应用程序进行调用,则需要使用SwingUtil。谷歌那个,先生。

希望有效。

答案 3 :(得分:0)

当然,只需使用Java Threads,然后加入即可获得结果(或其他正确的同步方法,取决于您的要求)

答案 4 :(得分:0)

您需要生成一个单独的线程来同时执行此活动。虽然这不是一个单独的过程,但您可以在完成发送符号时继续执行其他任务。

答案 5 :(得分:0)

以下是如何使用线程的示例。您只需将Runnable子类化,其中包含您的数据以及要在线程中运行的代码。然后创建一个以该runnable对象作为参数的线程。在线程上调用start将运行Runnable对象的run方法。

public class MyRunnable implements Runnable {

    private String commaDelimitedSymbols;

    public MyRunnable(StringcommaDelimitedSymbols) {
        this.commaDelimitedSymbols = commaDelimitedSymbols;
    }

    public void run() {
        // Your code
    }
}

public class Program {
    public static void main(String args[]) {
        MyRunnable myRunnable = new MyRunnable("...");
        Thread t = new Thread(myRunnable)
        t.start();
    }    
}