线程详解一

并行:同时处理多件事情

并发:交替处理多件事

线程:

   创建:继承thread重写run方法调start方法/实现runable接口重写run方法/实现callable接口/线程池提交任务

     runnable的run方法没有返回值不能抛返回值

     callable的call有泛型返回值且可抛出异常,搭配future/futuretask获取异步结果

     start启动线程,只能被调用一次

     run封装要执行的代码逻辑,可被调多次

  线程状态: new   runnable   blocked   waiting   timed_waiting   terminated死亡

线程详解一_第1张图片

顺序执行:

  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描述对象实例具体类型

线程详解一_第2张图片

      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则放入

      偏向锁/轻量级锁

         锁没有竞争情况下

偏向锁:线程详解一_第3张图片

你可能感兴趣的:(jvm)