Java核心技术卷一笔记8
Posted 肥肥的蚂蚁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java核心技术卷一笔记8相关的知识,希望对你有一定的参考价值。
第十四章 并发
多进程和多线程的区别:每个进程拥有自己的一套变量,而线程共享数据。
14.1 什么是线程
不要调用Thread类或Runnable对象的run方法。直接调用run方法只会执行同一个线程中的任务,而不会启动新线程。
应该调用start方法,该方法才能创建新线程。
14.2 中断线程
没有可以强制线程终止的方法,线程的终止是通过interrupt方法来请求,该线程自己决定如何响应中断。
如果线程已被中断,此时还调用sleep方法,中断置位会被清除并抛出异常。
线程中存在两个方法,一个是interrupted方法,该方法是静态方法,该方法检测当前线程是否中断的同时还会清除中断状态。另一个方法是isInterrupted方法,这是一个实例方法,这个方法不会改变中断状态。
14.3 线程状态
刚new出来的线程处于new状态,调用start方法后线程处于runnable状态,运行中的线程正是处于可运行状态。当一个线程试图获得一个内部的对象锁,而该锁被其他线程持有,该线程进入阻塞状态。当其他线程释放锁时且线程调度器允许该线程持有它,此时线程变成非阻塞状态。当线程等待另一个线程通知调度器一个条件时,此时该线程就进入了等待状态。若等待时有一个超时参数,则线程进入计时等待状态。
14.4 线程属性
线程优先级
每个线程都有一个优先级,一个线程会继承其父线程的优先级。
守护线程
守护线程唯一用途是为其他线程提供服务。
未捕获异常处理器
线程的非受查异常需要被传递到一个用于未捕获异常的处理器。
14.5 同步
不能对带资源的try语句使用锁。
应用Lock和Condition接口是最基本的加锁处理,
若使用volatile关键字声明一个域,则代表该域可能被另一个线程并发更新。
14.6 阻塞队列
在多线程程序中,应该用offer,poll,peek这类操作失败时返回null而不是抛出异常的方法。
14.7 线程安全的集合
任何集合类都可以通过同步包装器变成线程安全的,实现原理是应用了锁。
14.8 Callable和Future
FutureTask包装器可以将Callable转换成Future和Runnable。
14.9 执行器
14.10 同步器
以上是关于Java核心技术卷一笔记8的主要内容,如果未能解决你的问题,请参考以下文章