- 学习并发首先要认识到一点:没有阻塞,并发毫无意义。并发解决的是多任务的并行问题。
- 进程:操作系统级别的资源消费者,独立地址空间; 线程:进程中的“子任务”,无法单独持有系统资源。
- 实现方式:
- 实现runnable接口
- 继承Thread
- Thread构造器(Thread t = new Thread(new XXX()))
- 这里是列表文本Executor方式
ExecutorService exec = new Executors.newCachedThreadPool();
exec.execute(new XXX());
exec.shutdown();
ExecutorService exec = Executors.newCachedThreadPool();
Future<String> ft = exec.submit(new XXX());//XXX实现Callable接口
ft.get();//返回XXX的调用结果
- Exception处理类:Thread.UncaughtExceptionHandler接口的实现类可以用来处理线程运行中产生的异常
- ThreadFactory:对批量的Thread进行预订的设置
- 后台线程:所有非后台线程结束以后,不管后台线程运行到什么地方,JVM都会强制结束后台线程
- 线程协作:
- wait -> 挂起 -> notify/timeout -> 执行
- 同步(synchronized)
- 使用Lock和Condition
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
lock.lock();//获得lock
condition.await();//挂起任务
condition.signal();//唤醒condition上的任务
lock.unlock();//释放lock
- 线程安全的容器
collection
|----List
| |----LinkedList no synchronized
| |----ArrayList no synchronized
| |----Vector synchronized
| |----Stack
|----Set no synchronized
Map
|----HashMap no synchronized
|----HashTable synchronized
- 扩展: 多核系统上的 Java 并发缺陷模式