如何安全停止一个线程任务

1.终止线程:

1.使用violate boolean变量退出标志,使线程正常退出,即线程执行完run方法体后,正常退出(推荐)。

2.使用interrupt() 尝试终止线程,但是不一定成功。

3.使用stop()强制终止线程。不安全的是:创建子线程的线程会抛出异常,并且会释放子线程持有的所有的锁。

2.终止线程池

1.shutdown()关闭线程池

线程池不会立马关闭,要等添加到线程池的任务都执行完了,才会关闭。

2.shutdownNow()关闭线程池并终止任务

终止等待执行的线程,并返回他们的列表,尝试终止正在执行的线程,使用的是interrupt(),但是如果线程中没有运用到sleep(),wait(),定时锁等应用,是无法终止线程的。因此可能会等将正在执行的线程执行完毕,才会退出。

2.对于栈内存和堆内存的理解,以及栈内存如何转换为堆内存

1.在函数中定义的一些基本类型变量和对象引用变量,都是在函数的栈内存中分配的

2.堆内存用来存放new创建的对象和数组。jvm里的“堆”特指用于存放Java对象的内存区域,因此Java对象全部在堆上。JVM的堆被同一个JVM实例中的所有Java线程共享。它通常由某个自动内存管理机制所管理,这就是JVM的“垃圾回收”机制。

3.堆主要用于存放对象,栈主要用于执行程序。

4.栈内存中的变量指向堆内存中的变量,这实际上就是Java中的指针。

 

参考文章:https://juejin.im/post/5e5c5c52f265da575f4e7558#heading-134

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值