java concurrent併發包使用

package cn.com.zxf.atomic;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicExample implements Runnable{

    private AtomicInteger atomicInteger;

    private int index;

    public  AtomicExample(AtomicInteger atomicInteger, int index){

        this.atomicInteger=atomicInteger;

        this.index = index;
    }


    @Override
    public void run() {

        System.out.println("當前線程名稱:"+Thread.currentThread().getName());

        atomicInteger.addAndGet(index);

    }
}
package cn.com.zxf.atomic;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class AtomicExampleTest {


//線程池
private static ExecutorService executorService = Executors.newFixedThreadPool(10);



public static void main(String[] args) throws Exception {
//攔珊 使用
CountDownLatch countDownLatch = new CountDownLatch(100);
//信號量
Semaphore semaphore = new Semaphore(3);
//atomic 包使用 底層是基於CAS 併發編程
final AtomicInteger atomicInteger = new AtomicInteger();
//java 提供的鎖
Lock lock = new ReentrantLock();
//隊列
LinkedBlockingDeque linkedBlockingDeque = new LinkedBlockingDeque();
for(int i = 0 ;i<100; i++){
Thread.sleep(1000);
semaphore.acquire();
executorService.execute(new AtomicExample(atomicInteger,1));
semaphore.release();

Thread.sleep(1000);
countDownLatch.countDown();
}

countDownLatch.await();

executorService.shutdown();
System.out.println("計算值:"+atomicInteger.get());
}
}
concurrent 使用
相關文章
相關標籤/搜索