JDK5线程并发包
1)AtomicInteger
使用原子方式更新int值
2)创建线程池
a)创建固定大小的线程池
ExecutorService threadPool = Executors.newFixedThreadPool(10);//创建一个有10个线程的线程池
b)创建缓存线程池
Executors.newCachedThreadPool();
创建一个可根据需要创建新线程的线程池,可自动调整线程的多少
c)创建单线程的线程池
Executors.newSingleThreadExecutor();
该线程池里面只有一个线程,如果死掉了也可以自动再创建一个,保证永远有一个
d)创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行
ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);
threadPool.schedule(Runnable command,long delay,TimeUnit unit)
创建并执行在给定延迟后启用的一次性操作
threadPool.scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期.
也就是将在initialDelay后开始执行,然后在initialDelay+period后执行,接着在initialDelay + 2 * period后执行,依此类推
不管哪种创建方式其实都是由ThreadPoolExecutor类来实现的
3)Callable&Future
a)Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。
b)Callable要采用ExecutorSevice的submit方法提交,返回的future对象可以取消任务。
c)CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象。
4)Lock&Condition
Lock ---> synchronized
Lock lock = new ReentrantLock();
ReadWriteLock rwlock = new ReentrantReadWriteLock();
private Condition condition = lock.newCondition();
condition.await(); ---> wait()
condition.signal(); ---> notify()
5)Semaphore
final Semaphore semaphore = new Semaphore(3);
6)CyclicBarrier
7)CountDownLatch
8)Exchanger
9)ArrayBlockingQueue(阻塞队列)
10)ConcurrentHashMap
CopyOnWriteArrayList
CopyOnWriteArraySet