-
线程间协作方式
- 使用继承自超类Object的方法wait、notify、notifyAll
- 使用Condition
-
实现线程同步
和安全
-
关键两点特性
- 内存可见性
- 访问有序性
-
实现方法:
-
volatile关键字
- 一般用于变量上,使得直接从内存(即主内存)中访问变量的值而不去缓存(工作内存)中访问
- 实现了内存可见性,性能开销比synchronized低,但不保证原子性、访问有序性
-
synchronized
- 用于同步方法或同步块
- 每次保证只有一个线程能访问同步方法或同步块
- 性能开销大
- 实现了内存可见性和访问有序性
-
Locks包
- ReentrantLock
- ReentrantReadWriteLock
-
atomic
- 保证原子性
-
一些线程安全类和并发工具
-
同步容器
- Vector
- Stack
- HashTable
-
Collections类提供的静态工厂方法创建的类
- 使用synchronized进行同步
-
并发容器
- CopyOnWriteArrayList
- CopyOnWriteArraySet
- ConcurrentHashMap
-
阻塞队列
- ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- DelayQueue
-
并发辅助类
- CountDownLatch
- CyclicBarrier
- Semaphore
-
其他
- ThreadLocal
- 线程转储
- fork/join框架
- 死锁
- Java内存模型
-
经典问题
- 生产者与消费者问题
- 哲学家就餐问题
- 线程安全的singleton(单例模式)
-
使用线程池
- Executors框架
- ThreadPoolExecutor
-
创建线程
-
1
- 继承Thread类
- 实现Runnable接口
- 缺点:在执行完任务之后无法获取执行结果,可以使用2解决这个问题
-
2
- Callable、Future、FutureTask