Note that there are some explanatory texts on larger screens.

plurals
  1. POHaving problemns using threads to copy emails to folder in javamail
    primarykey
    data
    text
    <p>I´m having problem to copy some emails to other folder using threads, my problem is, the code don´t wait to finish the job.</p> <p>I want to move the messages by threads to accelaret the job, but I need to wait to move all messages, so how can I do this?</p> <pre><code>private static void moveMessagesToFolders(List&lt;Message&gt; listMessages, Store store, Set&lt;String&gt; setSender) throws MessagingException { HashMap&lt;String, List&lt;Message&gt;&gt; mapMessages = separeteMessagesBySender(listMessages, setSender); for (Entry&lt;String, List&lt;Message&gt;&gt; mapMessage : mapMessages.entrySet()) { Message[] messageArray = mapMessage.getValue().toArray(new Message[mapMessage.getValue().size()]); moveMessagesThread(messageArray, mapMessage, store); } } private static void moveMessagesThread(Message[] messageArray, Entry&lt;String, List&lt;Message&gt;&gt; mapMessage, Store store) { Set&lt;Thread&gt; setThread = createMovimentSetThread(messageArray, mapMessage, store); for (Thread thread : setThread) { thread.start(); } } private static Set&lt;Thread&gt; createMovimentSetThread(Message[] messageArray, Entry&lt;String, List&lt;Message&gt;&gt; mapMessage, Store store) { int [] threadIndexs = MathUtil.generateIndex(messageArray); Set&lt;Thread&gt; setThread = new HashSet&lt;&gt;(threadIndexs.length); for (int i = 0; i &lt; threadIndexs.length; i++) { setThread.add(new ThreadMoveMessages(messageArray, mapMessage, store, threadIndexs[i])); } return setThread; } </code></pre> <p>After i change the method to this implementing Executor.</p> <pre><code>private static void moveMessagesThread(Message[] messageArray, Entry&lt;String, List&lt;Message&gt;&gt; mapMessage, Store store) { int [] threadIndexs = MathUtil.generateIndex(messageArray); ExecutorService executor = Executors.newFixedThreadPool(4); for (int i = 0; i &lt; 4; i++) { executor.execute(new ThreadMoveMessages(messageArray, mapMessage, store, threadIndexs[i])); } executor.shutdown(); } </code></pre> <p>Implementing the class Thread</p> <pre><code>public class ThreadMoveMessages implements Callable&lt;Boolean&gt; { private Entry&lt;String, List&lt;Message&gt;&gt; mapMessage; private Store store; private Message[] messageArray; private static int indexControler; private static int indexLimit; public ThreadMoveMessages(Message[] messageArray, Entry&lt;String, List&lt;Message&gt;&gt; mapMessage, Store store, int indexEnd) { this.messageArray = Arrays.copyOf(messageArray, indexEnd); this.indexControler += indexEnd; this.indexLimit = indexControler; this.mapMessage = mapMessage; } @Override public Boolean call() throws Exception { Folder folder = null; try { folder = this.store.getDefaultFolder().getFolder(this.mapMessage.getKey()); folder.open(Folder.READ_WRITE); folder.appendMessages(this.messageArray); EmailUtil.deleteListMessage(this.mapMessage.getValue()); } catch (MessagingException e) { e.printStackTrace(); } return true; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload