在JAVA for EWS API中使用线程是否热门?

在JAVA for EWS API中使用线程是否热门?,java,multithreading,optimization,Java,Multithreading,Optimization,下面是EWS JAVA API的函数 public static void cleanRootFolders(String account) throws Exception{ deleteEmailsFromInbox(account); deleteEmailsFromDrafts(account); deleteEmailsFromSentItems(account); deleteEmailsFromJunkEmails(account); de

下面是EWS JAVA API的函数

public static void cleanRootFolders(String account) throws Exception{

    deleteEmailsFromInbox(account);
    deleteEmailsFromDrafts(account);
    deleteEmailsFromSentItems(account);
    deleteEmailsFromJunkEmails(account);
    deleteEventsFromCalendar(account);
    deleteEmailsFromDeletedItems(account);
}

如何实现线程来同时执行这六种方法以节省时间,而不是一个接一个地执行

您可以按如下方式使用线程池:

ExecutorService executor = Executors.newFixedThreadPool(6);
Runnable r = new Runnable() {
            @Override
            void run() {
                deleteEmailsFromInbox(account);
            }
        }
executor.execute(r)

r = new Runnable() {
            @Override
            void run() {
              deleteEmailsFromDrafts(account);
            }
        }

executor.execute(r)
或者,您可以简单地为每个任务启动一个线程:

Runnable r = new Runnable() {
                @Override
                void run() {
                    deleteEmailsFromInbox(account);
                }
            }
(new Thread(r)).start();

以下是完整的代码:

public static void cleanRootFolders(String account) throws Exception{

/*create number of threads  = number of cores. Do note, creating 6 threads doesn't mean 6 threads will work simultaneously.*/

ExecutorService executor = Executors.newFixedThreadPool(numberOfCores);

executor.execute(new Runnable() {
public void run() {
    deleteEmailsFromInbox(account);
}
});

executor.execute(new Runnable() {
public void run() {
    deleteEmailsFromDrafts(account);
}
});

executor.execute(new Runnable() {
public void run() {
    deleteEmailsFromSentItems(account);
}
});

executor.execute(new Runnable() {
public void run() {
    deleteEmailsFromJunkEmails(account);
 }
});

executor.execute(new Runnable() {
public void run() {
    deleteEventsFromCalendar(account);
}
});

executor.execute(new Runnable() {
public void run() {
   deleteEmailsFromDeletedItems(account);
}
});

executor.shutdown(); 
    //always shutdown, so the threads do not keep running.

}

它会同时运行六种方法吗?是的,所有六种方法都会同时运行。您可以使用2sec Thread.sleep time编写一些打印语句来尝试一下。同步地,您的代码将在大约12秒内完成,而使用带有6个线程的executor服务将在大约2秒内完成此代码。我在这里提到了6个线程,因为您将使用Thread.sleep,因此一次可以运行6个线程。Thread.sleep不使用CPU。即使在上面的代码中,您也可以使用6,但我个人更喜欢根据需求创建线程数。