美文网首页
二、多线程-基础2-几个关键字

二、多线程-基础2-几个关键字

作者: 小菜鸡的看书过程 | 来源:发表于2019-06-08 19:48 被阅读0次
    • start()run() 方法 (start会新启一个线程,run不会)
    • run()方法就是普通对象的普通方法
    • start()方法 java才会将线程对象和操作系统中的实际线程进行映射,再来执行run()方法
    • yield() 让出cpu的执行权,将线程从运行状态转到可运行状态,但是下个时间片,该线程依然有可能被再次选中运行

    • 守护线程和主线程共死,finally不能保证一定执行

    • synchronized内置锁

    • 对象锁,锁的是类的对象实例
    • 类锁,锁的是每个类的Class对象,每个类的Class对象在一个虚拟机中只有一个,所以类锁也只有一个。
    • private static synchronized void synClass(){ }
    • volatile 适用于只有一个线程写,多个线程读的场景,因为它只能确保可见性。

    • ThreadLocal 线程变量。可以理解为是个map。类型Map<Thread,Integer>

    • 线程间协作。轮训:难以保证及时性,资源开销很大

    • 等待通知

    • wait() 对象上的方法
    • notify() / notifyAll() 对象上的方法。注意 应该尽量使用notifyAll,使用notify因为有可能发生信号丢失的情况。
    • join() 线程A,执行了线程B的join方法,线程A必须要等待B完成了以后,线程A才能继续自己的工作。

    • yield() sleep() wait() nodify() 对锁影响

    • yield():线程在执行yield()以后,持有的锁是不会释放的
    • sleep(): sleep() 方法被调用以后,持有的锁是不释放的
    • wait(): 调动方法之前,必须要持有锁。调用了wait()方法以后,锁就会被释放,当wait()方法返回的时候,线程会重新持有锁
    • notify(): 调动方法之前,必须要持有锁,调用notify()方法本身不会释放锁

    相关文章

      网友评论

          本文标题:二、多线程-基础2-几个关键字

          本文链接:https://www.haomeiwen.com/subject/khzixctx.html