CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

2015-09-01から1ヶ月間の記事一覧

第6章 並行処理の機能強化 : 問題 9 : フィボナッチ数の計算を並列化

問題 ひとつ前のブログを参照してくださいと言いたいとこだけど、一応書いときますか… フィボナッチ数の計算を並列化するためにArrays.parallelPrefixメソッドを使え n 番目のフィボナッチ数は F = | 1 1 | | 1 0 | とした場合の F の n 乗の計算結果の左上…

第6章 並行処理の機能強化 : 問題 9 : フィボナッチ数の計算を並列化

問題 フィボナッチ数の計算を並列化するためにArrays.parallelPrefixメソッドを使え n 番目のフィボナッチ数は とした場合の の計算結果の の値である 注意 Markdown 記法のバグなのか、この後に Java のコードを書くと、せっかく TeX を使って書いた行列式…

第6章 並行処理の機能強化 : 問題 8 : parallelSort と sort

問題 あなたのコンピュータではArrays.parallelSortは、配列のサイズがどのくらいになればArrays.sortより速くなるか? 解答 Arrays.parallelSortはサイズが 8K 以下のときはマルチで動作しない そこで 8K から始めて 1K づつサイズを増やして計測してみる ■ …

第6章 並行処理の機能強化 : 問題 7 : ConcurrentHashMap の reduce メソッド

問題 ConcurrentHashMap<String, Long>内で、最大値を持つキーを見つけよ 同じ Long 値であれば、どのキーであっても構わない 準備 戦争と平和の単語(57万5343語)の出現回数のマップを使う ただし、3文字以下の単語は切り捨てる(でないと the が圧倒的だもんね) ■ 単語</string,>…

第6章 並行処理の機能強化 : 問題 6 : ConcurrentHashMap の computeIfAbsent メソッド

問題 複数スレッドが複数のファイルから全ての単語を読み込むアプリケーションを書け 各々の単語がどのファイルで使用されていたかを管理するためにConcurrentHashMap<String,Set<File>>とcomputeIfAbsentメソッドを使用せよ 準備 読み込むテキストファイルは問題 5 と同じ5つ</string,set<file>…

第6章 並行処理の機能強化 : 問題 5 : ConcurrentHashMap の merge メソッド

問題 複数スレッドが複数のファイルから全ての単語を読み込むアプリケーションを書け 各々の単語がどのファイルで使用されていたかを管理するためにConcurrentHashMap<String,Set<File>>とmergeメソッドを使用せよ 準備 テキストファイルから単語を順次読み込む Reader を定義</string,set<file>…

第6章 並行処理の機能強化 : 問題 4 : LongAccumulator

問題 LongAccumulatorを使用して、要素の最大値あるいは最小値を計算せよ 解答 1000万個の配列を用意して、最大値を求めてみる ■ 準備 long[] values = new long[1000_0000]; for (int i = 0; i < values.length; i++) { values[i] = (long)(1000_0000 * Mat…

第6章 並行処理の機能強化 : 問題 3 : AtomicLong と LongAdder

問題 1,000個のスレッドを生成し、各スレッドは、ある一つのカウンターを100,000回インクリメントする AtomicLong と LongAdder を使用した場合の性能を比較せよ 解答 ■ AtomicLong final int TASK = 1000; final int COUNT = 100_000; AtomicLong globalCou…

第6章 並行処理の機能強化 : 問題 2 : LongAdder

問題 増加する ID 列を生成するためにLongAdderは役に立つか? その答えの理由を述べよ 解答 LongAdderは、正しい値を取得できないので役に立たない まずLongAdderのincrementメソッドは、現在の値を返さない ■ 計算系のメソッド void increment() void add(l…

第6章 並行処理の機能強化 : 問題 1 : AtomicReference

問題 多数のスレッドが更新する最大長の文字列を管理するプログラムを書け 解答 単語の一覧は、第2章で出てきた戦争と平和(war-and-peace.txt)を使う ■ 単語一覧の取得 … 単語数 = 575,343 String[] words; String contents = new String( Files.readAllBy…

第6章 並行処理の機能強化

Java が登場した当時は ロックで同期をとる機能が、ライブラリではなく言語レベルでサポートされている ことが画期的だった プログラマはsynchronizedを拍手でもって迎えたが、それによって並行プログラミングの難しさが軽減された訳ではなかった ただ、Java…