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.禁止重排序