拾遗增补

本章应该掌握如下知识点:

  • 线程组的使用
  • 如何切换线程状态
  • SimpleDateFormat类与多线程的解决办法
  • 如何处理线程的异常

线程的状态

线程对象在不同的运行时期有不同的状态,状态信息存在于State枚举类中.

  • 验证NEW、RUNNABLE和TERMINATED

NEW状态是线程实例化后还从未执行start()方法时的状态,
RUNNABLE状态是线程进入运行的状态,
TERMINATED是线程被销毁时的状态

  • 验证TIMED_WAITING

线程状态TIMED_WAITING代表线程执行了Thread.sleep()方法,呈等待状态,等待时间到达,继续向下运行

  • 验证BLOCKED

BLOCKED状态出现在某一个线程在等待锁的时候

  • 验证WAITING

WAITING状态是线程执行了Object.wait()方法后所处的状态

线程组

可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程.这样的组织结构有些类似于树的形式
线程组的作用:可以批量的管理线程或线程组对象,有效地对线程或线程组对象进行组织

  • 线程对象关联线程组:1级关联

1级关联就是父对象中有子对象,但并不创建子孙对象.比如创建一些线程时,为了有效地对这些线程进行组织管理,创建一个线程组,然后将部分线程归属到该组中.
优点:可以对零散的线程对象进行有效的组织和规划

  • 线程对象关联线程组:多级关联

多级关联就是父对象中有子对象,子对象中再创建子对象,也就是出现子孙对象的效果.但是这种写法在开发中并不太常见,如果线程树结构设计得非常复杂反而不利于线程对象的管理,但JDK却提供了支持多级关联的线程树结构

  • 线程组自动归属性

自动归属就是自动归到当前线程组中.

  • 获取根线程组

获得父线程组的名称:
Thread.currentThread().getThreadGroup().getParent().getName()
JVM的根线程组就是System,再取其父线程组则出现空指针异常

  • 线程组里加线程组

  • 组内的线程批量停止

通过将线程归属到线程组中,当调用线程组ThreadGroup的interrupt()方法时,可以将该组中的所有正在运行的线程批量停止

  • 递归与非递归取得组内对象

使线程具有有序性

正常情况下,线程在运行时多个线程之间执行任务的时机是无序的.可以通过锁和序号改造代码使它们具有有序性.

SimpleDateFormat非线程安全

类SimpleDateFormat主要负责日期的转换与格式化,在多线程环境中,使用此类容易出现数据转换及处理的不准确,SimpleDateFormat类不是线程安全的.

  • 出现异常
  • 解决异常

1.创建多个SimpleDateFormat类的实例
2.使用ThreadLocal类使线程绑定到指定的对象

线程中出现异常的处理

使用UncaughtExceptionHandler类对异常进行"捕捉"
方法setUncaughtExceptionHandler()的作用是对指定的线程对象设置默认的异常处理器
在Thread类中还可以使用setDefaultUncaughtExceptionHandler()方法对指定线程类的所有对象设置默认的异常处理器

线程组内处理异常

在默认的情况下,线程组中的一个线程出现异常不会影响其他线程的运行
一个线程出现异常使一个线程组中的线程全部停止运行:
public void uncaughtException(Thread t,Throwable e){this.interrupt}方法中的参数t是出现异常的线程对象.
使用自定义java.lang.ThreadGroup线程组,并且重写uncaughtException方法处理组内线程中断行为时,每个线程对象中的run()方法内部不要有异常catch语句,如果有catch语句则public void uncaughtException(Thread t,Throwable e)方法不执行

线程异常处理的传递

多个线程异常处理方式放在一起运行:
对象异常处理(setUncaughtExceptionHandler())>类异常处(setDefaultUncaughtExceptionHandler())
静态异常处理(类异常处理)和线程组异常处理会同时执行,如果只想要静态异常处理则必须在public void uncaughtException(Thread t,Throwable e)方法中加上super.uncaughtException(t,e)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值