技术文

多线程之类

2017-08-03  本文已影响0人  vaneL
  1. AtomicInteger类:可以对基本数据/数组中的基本数据/类中的基本数据进行操作
  2. Executors类:
    a. ExecutorService threadPool = Executors.newFixedThreadPool(3);固定大小线程池
    b. ExecutorService threadPool = Executors.newCachedThreadPool();缓存线程池
    c. ExecutorService threadPool = Executors.newSingleThreadExecutor();单一线程池
  3. Callable&Future:
    a. Callable采用ExecutorService的submit方法提交,返回的future对象可以取消任务
    b. Future取得的结果类型和Callable返回的结果类型必须一致,通过泛型来实现
Future<String> future = threadPool.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                Thread.sleep(2000);
                return "hello";
            }
        });

CompletionService<Integer> completionService = new ExecutorCompletionService<~>(threadPool2);
        for (int i = 0; i < 10; i++) {
            final int seq = i;
            completionService.submit(new Callable<Integer>() {
                @Override
                public Integer call() throws Exception {
                    Thread.sleep(new Random().nextInt(5000));
                    return seq;
                }
            });
        }
  1. Lock&Condition
    a. 两个线程要实现互斥,它们必须用同一个Lock对象。
    b. Lock与synchronize作用一样,锁本身是一个对象
    c. 读写锁【多个读锁不互斥、读锁写锁互斥、写锁写锁互斥】
    d. Condition功能类似Object的wait和notify方法
    e. 一个锁可以有多个Condition,即有多路等待和通知

  2. Semaphore信号灯
    a. 可以维护当前访问自身的线程个数,并提供同步机制
    b. 单个semaphore可以实现互斥锁功能【一个线程获得锁,再由另一个线程释放锁】

  3. 队列BlockingQueue
    a. 只有put方法和take方法才具有阻塞效果
    b. 用两个具有1个空间的队列来实现同步通知功能
    c. 与Semaphore相似;但队列是一方存放数据,一方释放数据;而Semaphore通常是由同一方设置和释放信号量
    d.ArrayBlockingQueue & LinkedBlockingDeque

  1. 同步集合【java5提供的】
    a. ConcurrentHashMap
    b. ConcurrentSkipListMap
    c. ConcurrentSkipListSet
    d. CopyOnWriteArrayList
    e. CopyOnWriteArraySet

  2. 使用了两个condition!!!

condition.jpg condition2.jpg
上一篇下一篇

猜你喜欢

热点阅读