JAVA多线程-关闭线程



多线程是提高程序运行效率的一种有效手段,他能让程序同时执行多个操作,但是由于一个程序的多个线程间可能利用同一资源或者互相影响,所以如何让他们协调的工作是一个很大的问题。

 

在我所经历的多线程使用中,首先遇到的问题就是如何把他们安全的关闭。

 

遇到的场景是这样的,一个功能线程间隔执行(无限循环加间隔休眠),或是重复执行(使用计时器)。在对其进行关闭时可能遇到关闭指令发出(主线程对子线程执行interrupt命令)时,子线程正在运行,此时有可能抛出异常。

 

这时候系统很容易发生各种无法预知的错误,为了避免这种错误,我首先使用了一种方法:

 

自标记法

 

首先,在线程类里加入一个boolean类型属性,用于标记它的运行状态。一旦需要关闭这个线程,我不是对其执行interrupt而是将他的标记设为false,而线程自身每次运行之前以及运行完某一步操作时,我都让线程自身检测一下自身的标记,如果一旦检测到标记变为了false,就对自身执行interrupt方法,这样就能安全的关闭自己了。

 

但是这种方法在一些使用HHSspringMVC的项目时,由于有时会使用注解之类的东西,很难去确定是否访问到了自身的标记,所以我又使用了另一种方法:

 

主线程标记法

 

因为主线程大多是唯一的,将标记设在主线程,而子线程参照主线程的标记判断是否关闭自己,这样就避免了使用注释时造成子线程不便访问的问题。

 

 

归根到底,避免线程关闭异常主要是要使用自关闭,此时由于线程只是在关闭自己而不会执行其他操作,肯定是不会发生异常的,而判断是否进行自关闭,则只需一个参照的标记即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值