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

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

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

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

这可能吗 ??

请分享您的观点。

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

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

创建执行程序服务。 这将保留一个线程池以供重用。 每次为每个异步方法调用创建一个新线程的效率要高得多。

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

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

只要您不提交太多,就会在调用sendSymbolsendSymbol

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

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

也许更好的方法是使用Executors

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

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

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

以下是如何使用线程的示例。 您只需将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(); } } 

肯定是可能的。 线程是走到这里的方式。 在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。 谷歌那个,先生。

希望有效。