1.java原子类。volatile关键字
2.线程池
创建固定大小的线程池
创建缓存线程池//线程数可随需求变化
创建单一线程池
关闭线程池
shutdown与shutdownNow的比较
用线程池启动定时器
调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取消任务。
支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。
3.callable和future(不常用)
4.Lock锁类似synchronized,更加灵活,还分为读锁,写锁,读写锁,写锁与其他锁保持互斥。
5.conditon条件通过lock产生,await()和signal()类似object的wait和notify。
缓冲区实现实例如下(api demo):
class BoundedBuffer {
final Lock lock = new ReentrantLock();
final Condition notFull = lock.newCondition();
final Condition notEmpty = lock.newCondition();
final Object[] items = new Object[100];
int putptr, takeptr, count;
public void put(Object x) throws InterruptedException {
lock.lock();
try {
while (count == items.length)
notFull.await();
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
notEmpty.signal();
} finally {
lock.unlock();
}
}
public Object take() throws InterruptedException {
lock.lock();
try {
while (count == 0)
notEmpty.await();
Object x = items[takeptr];
if (++takeptr == items.length) takeptr = 0;
--count;
notFull.signal();
return x;
} finally {
lock.unlock();
}
}
}
6.并发工具
Semaphore,CyclicBarrier,CountDownLatch,Exchanger
7.可阻塞队列ArrayBlockingQueue
8.同步集合
java1.5之前使用Collections工具类提供的synchronizedCollection方法
在使用iterator迭代集合时不能改变集合,否则会产生ConcurrentModificationException,原因与iterator线程机制有关。
java1.5可以提供的并发类,如下:
ConcurrentHashMap
CopyOnWriteArrayList
CopyOnWriteArraySet
---课程 来自 张孝祥老师