并发与多线程
并发能提升吞吐,但也带来线程安全难题。核心是把"共享可变状态"管理好。
一、线程与状态
线程有新建、就绪、运行、阻塞、终止等状态。创建线程可用 Runnable/Callable,生产环境优先用线程池而非手动 new。
二、锁机制
- synchronized:JVM 内置锁,可锁方法或代码块,升级为轻量/重量锁。
- ReentrantLock:API 级锁,支持公平锁、可中断、多条件变量。
- volatile:保证可见性与有序性(禁止指令重排),但不保证原子性。
三、线程池
ThreadPoolExecutor 七大参数决定行为:核心/最大线程数、队列、拒绝策略等。合理设置能避免资源耗尽与任务堆积。
并发三原则:尽量无共享(栈封闭)、不可变对象、必须共享时用正确同步。能用并发容器(ConcurrentHashMap 等)就别自己加锁。