2.5线程安全的类
- StringBuffer
- 线程安全,可变的字符序列
- 从JDK5开始,使用StringBuilder类
- Vector
- 如果不需要线程安全的实现,建议使用
ArrayList
替代Vector
- 如果不需要线程安全的实现,建议使用
- HashTable
- 该类实现了一个哈希表,它将键映射到值,任何非null对象都可以用作键或者值
- 如果不需要线程安全的实现,建议使用
HashMap
替代HashTable
2.6Lock锁
为了更加清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock
Lock是接口不能直接实例化,通常采用的是它的实现类ReentrantLock
来实例化。
- ReentrantLock构造方法
方法名 | 说明 |
---|---|
ReentrantLock() | 创建一个ReentrantLock的实例 |
- 加锁解锁方法
方法名 | 说明 |
---|---|
void lock() | 获得锁 |
void unlock() | 释放锁 |
3.生产者和消费者
所谓生产者消费者问题,实际上包含了两类线程:
一类是生产者线程用于生产数据
一类是消费者线程用于消费数据
为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库
生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为
消费者只需要从共享数据区中去获取数据,并不需要关心生产者的行为
y
- Object类的等待和唤醒方法
void wait() | 导致当前线程等待,直到另一个线程调用该对象的notify()方法或者notifyAll()方法 |
void notiry() | 唤醒正在等待对象监视器的单个线程 |
void notifyAll() | 唤醒正在等待对象监视器的所有线程 |