再構成
ピカソもビルダーモードを使用するように変更されました。
このコミットにより、picasso は Builder パターンで構築されるようになり、ExecutorService のような異なる内部コンポーネントを簡単に設定できるようになりました。
feature
マルチスレッドの登場です。
Executors.c(0x3, new PicassoThreadFactory()); picasso のスレッドプールは singleThreadExecutor を使っていますが、今回は .NET に変更されています。つまり、最大3つのスレッドが同時にリクエストを処理することになり、後で並行処理の問題が発生します。
カスタムスレッド工場
上記のスレッド プールは、Picasso のカスタム スレッド ファクトリ クラスである PicassoThreadFactory オブジェクトを渡すことで生成されることがわかります。
static class PicassoThreadFactory implements ThreadFactory {
 private static final AtomicInteger id = new AtomicInteger();
 @SuppressWarnings("NullableProblems") public Thread newThread(Runnable r) {
 Thread t = new Thread(r);
 t.setName("picasso-" + id.getAndIncrement());
 t.setPriority(Process.THREAD_PRIORITY_BACKGROUND);
 
 return t;
 }
}
これによりスレッドの名前を設定することができ、デバッグ時に生成したスレッドだけを簡単に見ることができます。スレッドの優先度も設定できます。生成されたスレッドの名前にはスレッド数が含まれており、スレッド数は AtomicInteger であることに注意してください。"並行性の問題に対処しなければならないということです" と言った直後に遭遇したものです。
なぜ AtomicInteger
スレッド・プールによってスレッドが生成されるときにスレッド・ファクトリーが使用されますが、スレッド・プールがスレッドを生成することに並行性の問題はありますか?使い方によります。たとえば、PicassoThreadFactory の AtomicInteger id 変数は静的であるため、複数のスレッド プールが PicassoThreadFactory を使用する場合、同じ id を共有することになり、マルチスレッドの問題が発生する可能性があります。実際には、スレッド ファクトリのスレッド セーフ実装を記述するのが最善です。




