マルチスレッド(同時)学習ノート

2590 ワード

1、どのような方法でスレッドを起動しても、スレッドに名前を付けることは、エラーの並べ替え、監視に役立ちます.
2,スレッドinterruptを処理する.
3,Futrureはタスクの提出者と実行者の間の通信手段であり,get()がブロックする.
  ExecutorService executor = Executors.newSingleThreadExecutor();
    Callable<Object> task = new Callable<Object>() {
        
        @Override
        public Object call() throws Exception {

            Object result= "...";
            return result;
        }
    };
    
    Future<Object> future =executor.submit(task);
    future.get();

4、ブロックキュー、一般的なデータ構造、生産者消費者モデルに用いられ、一般的な3種類のブロックキューはArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueueである.
ブロックキューを使用する場合は、Queueから継承されたメソッドを使用しないでください.そうしないと、Blockingプロパティが失われます.
BlockingQueueでは、offerやpollではなくputとtakeを使用します.
次はlockでblockingqを実現するpv操作です
public class BlockingQ {
    private Lock lock = new ReentrantLock();
    private Condition notEmpty = lock.newCondition();
    private Condition notFull = lock.newCondition();
    private Queue<Object> linkedList = new LinkedList<Object>();
    private int maxLenght = 10;
    
    public Object take() throws InterruptedException{
        lock.lock();
        try{
            if(linkedList.size() == 0){
                notEmpty.await();
            }
            if(linkedList.size() == maxLenght){
                notFull.signalAll();
            }
            return linkedList.poll();
        }finally{
            lock.unlock();
        }   
    }
    
    public void offer(Object object) throws InterruptedException{
        lock.lock();
        try{
            if(linkedList.size() == 0){
                notEmpty.signalAll();
                
            }
            
            if(linkedList.size() == maxLenght){
                notFull.await();
            }
            linkedList.add(object);
        }finally{
            lock.unlock();
        }
    }
    
    
    
}

5,ReentrantLockとSynchronizedの関係
Synchronizedはlockの簡略化された実装であり、1つのlockは複数のConditionに対応することができ、SyschronizedはlockとConditionを統合し、Syschronizedはロックの簡易バージョンであり、効率はlockほど高くないと言える.
6,ロックメソッドの代わりに,ハードウェア原子操作,lockfreeアルゴリズム.lockfreeアルゴリズムは3つのステップに分けられ,ループ,CAS(compare and set),返される.
7,concurrentHashMapデータ構造はlockfreeのアルゴリズムを用い,複数のwriter同時実行をサポートする.
未完待续...