JAVA中的Thread

线程实现的三种方式

1:继承Thread

2:实现Runable

3:实现Callable<T>接口(可以获得执行结果)

Thread中的属性和方法

构造:

方法:

 使用线程的注意事项

开启线程最好给定线程名称,方便定位错误

不要使用stop,suppose方法,已经过期

main线程结束了,子线程可能还未结束

线程中断机制

1.调用Thread.stop(已过时,不安全,不推荐)

2.调用Thread.interrupt()他是一种协作机制,线程A调用线程B,线程B收到之后再确认是否关闭

java中某些外部线调用了调用了该线程interrupt方法之后的处理机制如下:

如果该线程处于阻塞状态(调用了wait或者sleep方法)线程会被唤醒,并且会抛出InterruptExcepton异常,如果该线程被阻塞到IO上,则系统资源会关闭,如果不调用Interrupt方法,该线程调用之后所有的资源都会被关闭,解决办法:调用interrupted方法。

线程的生命周期:

新建(new Thread)-->就绪(start)-->运行(run)-->阻塞(sleep,wait,IO)-->死亡(interrupt)

线程中wait和sleep方法

sleep释放资源,不释放锁,设置的睡眠时间是最小休眠时间。作用:防止该线程霸占该进程获取的CPU执行权

wait释放资源释放锁,需要返回锁对象,所以必须自身保有锁,否则抛出异常

线程副本ThreadLocal:

为每一个线程提供变量副本,保证并发条件下的数据安全

原理:在每次赋值操作时都会专门为该线程拷贝一份数据放入map中,key为该线程

一般都是静态的,所以需要及时使用remove方法

线程的异常处理

线程是独立的代码块,所有的异常需要在自身处理掉,不能抛出check Exception 。但是可以抛出unCheck Exception,抛出之后此线程就会终止,但是其他线程完全感觉不到,也就是说其他线程还可以正常运行

所以在处理线程异常的时候,check Exception直接进行try catch就可以,对于unchecked Exception则需要使用到UncaughtExceptionHandler类进行捕获(定义类并实现这个类,写入自己的异常处理逻辑,在线程start方法调用前调用即可)

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值