同時制御のまとめ(2)

2180 ワード

1.java原子クラス.volatileキーワード
 
2.スレッドプール
固定サイズのスレッドプールの作成
キャッシュ・スレッド・プールの作成//スレッド数は、必要に応じて変更できます
単一スレッドプールの作成
スレッドプールを閉じる
shutdownとshutdown Nowの比較
スレッドプールでタイマを起動する
ScheduledExecutorServiceのscheduleメソッドを呼び出し、返されるScheduleFutureオブジェクトはタスクをキャンセルできます.
間隔繰返しタスクをサポートするタイミング方式は、絶対タイミング方式を直接サポートせず、相対時間方式に変換する必要があります.
 
3.callableとfuture(非常用)
 
4.ロックロックはsynchronizedに似ており、より柔軟で、リードロック、ライトロック、リードライトロックに分けられ、ライトロックは他のロックと反発している.
 
5.conditon条件はlockによって生成され、await()およびsignal()はobjectのwaitおよびnotifyに類似する.
バッファ実装例は以下の通りである(api demo).
class BoundedBuffer {
   final Lock lock = new ReentrantLock();
   final Condition notFull  = lock.newCondition(); 
   final Condition notEmpty = lock.newCondition(); 

   final Object[] items = new Object[100];
   int putptr, takeptr, count;

   public void put(Object x) throws InterruptedException {
     lock.lock();
     try {
       while (count == items.length) 
         notFull.await();
       items[putptr] = x; 
       if (++putptr == items.length) putptr = 0;
       ++count;
       notEmpty.signal();
     } finally {
       lock.unlock();
     }
   }

   public Object take() throws InterruptedException {
     lock.lock();
     try {
       while (count == 0) 
         notEmpty.await();
       Object x = items[takeptr]; 
       if (++takeptr == items.length) takeptr = 0;
       --count;
       notFull.signal();
       return x;
     } finally {
       lock.unlock();
     }
   } 
 }

 
6.同時ツール
Semaphore,CyclicBarrier,CountDownLatch,Exchanger
 
7.ブロック可能なキューArrayBlockingQueue
 
8.同期セット
java1.5 Collectionsツールクラスを使用して以前に提供されたsynchronizedCollectionsメソッド
iterator反復コレクションを使用する場合、コレクションを変更することはできません.そうしないと、iteratorスレッドメカニズムに関係するため、ConcurrentModificationExceptionが発生します.
java1.5提供できる同時クラスは次のとおりです.
  ConcurrentHashMap
  CopyOnWriteArrayList 
  CopyOnWriteArraySet 
 
---授業は張孝祥先生から来ました.