在JAVA for EWS API中使用线程是否热门?
下面是EWS JAVA 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
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,但我个人更喜欢根据需求创建线程数。