我所知道的线程

  • extend Thread
  • implements Runnable
工具类创建线程 (未完成)
  • synchronied 修饰方法和修饰代码块(在阿里Java手册中提到能锁代码块就不要所方法尽量提高性能)

  1. 修饰方法时:this 引用的当前实例持有锁
sychronized void method(){...}
  1. 修饰代码块: 指定对象
sychronized(object){...}
  • sleep、wait、join、yield

  1. wait 一定要有锁,当线程wait时,释放锁进入等待队列,用 notify 和 notifyAll 唤醒。wait 和 notify/notifyAll 一定要同步,否则会出现 IllegalMonitorStateException异常。
  2. sleep 是线程进入睡眠状态,持有锁,并不是释放锁。
  3. join 是等待上一个线程结束,相当于收拾好自己的箱子再去干其他事。
  4. yield 是放弃对已经持有锁的代码块/方法,重新竞争,再次持有锁的不一定是上一个持有锁的线程。
  • volatile

volatile其实并不能保证变量的原子性,他其实就是在修改一个变量之后,并不把修改后的写入缓存区,而是直接呈现出来的及时性。

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

推荐阅读更多精彩内容