面试官 最爱问的线程问题

1、如何停止一个线程

官方停止线程的stop方法被废弃,所以不能直接简单的停止线程。

协作的任务执行模式

通知目标线程自行结束,而不是强制停止,目标线程应当具备处理中断的能力,中断方式 Interrupt,(volatile)boolean标志位

interrupted() 是静态方法,获取当前线程的中断状态,并清空  当前运行的线程   中断状态调用后清空,重复调用后续返回false

isInterrupted() 是非静态方法,获取该线程的中断状态,不清空 调用的线程对象对应的线程  可重复调用,中断清空前一直返回true

总结 

线程不应该被直接stop,但是线程里面的任务可以停止

线程内置中断机制的使用与原理

通过volatile boolean   标志位通知线程停止

2、如何写出线程安全的程序?

线程安全 :可变资源(内存)线程间共享

如何实现线程安?

a.不共享资源  (可重入函数,) public static int add addTwo(int num){  retrurn  num +2;   线程安全}

b. 共享不可变资源    (ThreadLocal,可深入了解其源码,ThreadLocalMap ,对象持有 弱引用)

ThradLocal 使用建议  声明为全局静态 final成员,避免存储大量对象,用完后及时移除对象

c.共享可变资源 

1.可见性  (使用final,volatile,加锁,锁释放时会强制将缓存刷新到主内存)

2.操作原子性  (加锁,保证操作的互斥性,使用原子数值类型 AtomicInteger,使用原子属性更新器AtomicRefreenceFieldUpdater)

3.禁止重排序

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值