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

  • 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()方法本身不会释放锁
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 3,146评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,640评论 1 15
  • 此片文章主要总结的是Thread类及相关的基础概念和API,首先需要厘清线程调度中的几个基本概念: 一、线程调度的...
    千淘萬漉阅读 2,714评论 0 2
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 765评论 0 4
  • 一扩展javalangThread类二实现javalangRunnable接口三Thread和Runnable的区...
    和帅_db6a阅读 632评论 0 1

友情链接更多精彩内容