线程与线程之间是通过协作来调度的
需要结束一个线程,不推荐使用stop方法,因为该方法不一定会释放该线程所产生的资源回收。
推荐使用interrupt、isinterrupt、isinterrupted来配合使用
线程中共享变量ThreadLocal,用于存放当前线程内所使用的变量
需要注意:
1.使用时需要判断值是否为空,因为采用的弱引用,所以在gc时会被回收
2.使用完必须要remove,否则在gc回收后,该value将不会被获取到,除非再次执行get或set、clear时,才会去清除引用为null的数据。
wait和notify、synchronized使用
wait与notify + synchronized使用,必须在synchronized锁住的对象上才能使用wait/notify,否则会报错
synchronized是非公平锁,即每次执行到synchronized时,当前线程都会先去尝试获取锁,获取到了就立即执行,获取失败就进入等待状态,直到锁释放才会去抢锁。与AQS的实现Sync的实现上会有公平锁与非公平锁的选择。
工作密取
将自己的工作做完之后,将别人的工作拿来完成,做完了再把结果放回去
在fork-join中就使用到,在线程A完成了当前线程的任务,会去线程B拿一个任务来做,做完了再放回去。