并行:同时处理多件事情
并发:交替处理多件事
线程:
创建:继承thread重写run方法调start方法/实现runable接口重写run方法/实现callable接口/线程池提交任务
runnable的run方法没有返回值不能抛返回值
callable的call有泛型返回值且可抛出异常,搭配future/futuretask获取异步结果
start启动线程,只能被调用一次
run封装要执行的代码逻辑,可被调多次
线程状态: new runnable blocked waiting timed_waiting terminated死亡
顺序执行:
join等待线程执行结束,调用join的线程进入timed_waiting状态,等到被调用线程执行完
notify随机唤醒一个线程 / notifyall唤醒所有线程
wait和sleep:
wait (long)object的方法,可被notify唤醒否则一直等待,可被打断,执行完释放锁其他线程可获取锁,想调用现获取对象锁(搭配synchronized)。
sleep(long)thread的静态方法,可被打断,如在synchronized中执行不会释放对象锁。
停止线程
退出标志:判断条件中 加一个开关
调用stop方法强制退出(不推荐)
使用interrupt中断线程
打断阻塞sleep/wait/join线程,抛出interruptedexception;
打断正常线程,据打断状态是否退出isinterrupted
并发安全:
synchronized()monitorexit
monitor:jvm提供 属性waitset entrylist owner
重量级锁,用户态内核态切换,进程上下文切换,成本高性能低
对象头:hotspot对象结构,markword对象头 klassword描述对象实例具体类型
hashcode25个bit位,age新生代中挪动次数,biased_lock是否开启偏向锁,lock标识2位
epoch偏向锁时间戳2位;ptr_to_lock_record轻量级锁记录 ptr_to_heavyweight_monitor指向对象监视器monitor的指针30位
线程属性:锁对象记录/ lockrecord锁记录地址cas交换数据
实例数据:hotspot对象结构,成员变量
对其填充:上面不是8的整数倍,对齐填充
owner是否为null,entrylist等待线程(阻塞线程),waitset当一个线程调用wait则放入
偏向锁/轻量级锁
锁没有竞争情况下
偏向锁: