1 线程组和未处理异常
较少使用
- 线程组可以批量设置管理线程,如果创建的线程不指定分组则为默认线程组,默认情况下子线程和创建它的父线程属于同一个分组。
- 可以在线程或者线程组上设置
Thread.UncaughtExceptionHandler,在线程执行过程中如果抛出一个未处理的异常,JVM在结束该线程前会自动查找是否有对应的实现了Thread.UncaughtExceptionHandler接口的对象,如果找到则执行该对象的UncaughtException方法
2 Callable和Future
特点如下:
- 实现
Callable接口后,可以通过call()抛出异常和返回结果 - 实现
Future接口的FutureTask可以接受Callable的返回值.
3 线程池
ExecutorService pool = Executors.newFixedThreadPool(6);
pool.submit(new RunnableThread());//支持Runnable和Future
pool.shutdown();
4 线程相关类
4.1 ThreadLocal
- 要点: 同步机制是为了使所有线程能够共享对象,而
ThreadLocal是为了隔离对象,即每个线程都修改该对象的副本而不会影响到其他线程。 - 使用:
private ThreadLocal<String> localVar= new ThreadLocal<String>()
4.2 包装线程不安全的类
Collections提供了以下几个接口来将线程不安全的集合转为线程安全的:
synchronizedCollection()返回线程安全的collectionsynchronizedSet()返回线程安全的SetsynchronizedMap()返回线程安全的MapsynchronizedSortedSet()返回线程安全的SortedSetsynchronizedSortedMap()返回线程安全的SortedMapsynchronizedList()返回线程安全的List
4.3 线程安全的集合类
java.util.concurrent包下的:
ConcurrentHashMapConcurrentLinkedDequeConcurrentLinkedQueue
以上几个类都支持并发读写,在读时不会锁定。创建迭代器之后,对其修改是不能在遍历中反应出来的,而且不会报错,而java.util包下的集合类是会报ConcurrentModificationException的异常的