2017-02-10 17 views
0

私はパスワードの配列リストを持っています。そして、そのパスワードでファイルが復号化されているかどうか確認したい。文字列の最後に数字を追加するなど、文字列変換を適用するスレッドを使用したいと思います。 Javaスレッドまたはスレッドプールを使用してこれを行う最善の方法は何ですか?可能な方法のJavaスレッドでArrayList操作を並列化する方法は?

for (String pass : passwordDictionary) { 
       setPassword(password); 
       decrypt(secret) 
       setPassword(password+numbers); 
       decrypt(secret) 
+0

最善の方法は、[並列ストリーム(https://docs.oracle.com/javase/tutorial/collections/streamsを使用することです/parallelism.html)。 – Andreas

+0

java 8にはこのようなタスク用の並列ストリーミングAPIがあります。 – user1516873

答えて

3

Stream.parallel()を使用することである。

passwordDictionary.stream().parallel().forEach(password -> { 
       setPassword(password); 
       decrypt(secret) 
       setPassword(password+numbers); 
       decrypt(secret) 
}) 
+0

彼はJava8にいると仮定します – ferahgo

+0

ありがとうございます。私はまだJavaでlambdasを使用していないが、本当に興味深いね。 .parallelがどのくらい多くのトレッドを初期化するのか知ることは可能でしょうか? – Wideem

+2

@Wideem並列ストリームは 'Fork/Join framework'を使います。したがって、 'N-1'スレッドを持つことができます。ここで' N'はデフォルトでプロセッサの数です。 http://docs.oracle.com/javase/tutorial/collections/streams/parallelism.htmlおよびhttp://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html –

関連する問題