多线程之类
2017-08-03 本文已影响0人
vaneL
- AtomicInteger类:可以对基本数据/数组中的基本数据/类中的基本数据进行操作
- Executors类:
a. ExecutorService threadPool = Executors.newFixedThreadPool(3);固定大小线程池
b. ExecutorService threadPool = Executors.newCachedThreadPool();缓存线程池
c. ExecutorService threadPool = Executors.newSingleThreadExecutor();单一线程池 - 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;
}
});
}
-
Lock&Condition
a. 两个线程要实现互斥,它们必须用同一个Lock对象。
b. Lock与synchronize作用一样,锁本身是一个对象
c. 读写锁【多个读锁不互斥、读锁写锁互斥、写锁写锁互斥】
d. Condition功能类似Object的wait和notify方法
e. 一个锁可以有多个Condition,即有多路等待和通知 -
Semaphore信号灯
a. 可以维护当前访问自身的线程个数,并提供同步机制
b. 单个semaphore可以实现互斥锁功能【一个线程获得锁,再由另一个线程释放锁】 -
队列BlockingQueue
a. 只有put方法和take方法才具有阻塞效果
b. 用两个具有1个空间的队列来实现同步通知功能
c. 与Semaphore相似;但队列是一方存放数据,一方释放数据;而Semaphore通常是由同一方设置和释放信号量
d.ArrayBlockingQueue & LinkedBlockingDeque
-
同步集合【java5提供的】
a. ConcurrentHashMap
b. ConcurrentSkipListMap
c. ConcurrentSkipListSet
d. CopyOnWriteArrayList
e. CopyOnWriteArraySet -
使用了两个condition!!!