java thread wait时间单位_线程概要 Java

线程

进程和线程的区别

串行:初期的计算机只能串行执行任务,大量时间等待用户输入

批处理:预先将用户的指令集中成清单,批量串行处理用户指令,仍然无法并发执行

进程:进程独占内存空间,保存各自运行状态,互相之间不相互干扰,为并发处理任务提供了可能、

线程:共享进程的内存资源,相互间切换状态,支持更细细度的控制

进程是资源分配的最小单位,线程是CPU资源分配的基本单位

所有与进程相关的资源,都被记录在PCB中

进程是抢占处理机的调度单位;线程属于某个进程,共享其资源

线程只有堆栈寄存器、程序计数器和TCB组成

81c414efbb10a45577aa9eda655a727f.png

3e604245e511cdbe5b933a92509ba84d.png

线程不能看做独立的应用,而进程可以看做独立的应用

进程有独立的地址空间,相互之间不影响,线程只是进程的不同执行路径

线程没有独立的地址空间,多进程的程序比多线程的程序更加健壮

进程的切换比线程的切换开销大

Java进程和线程的关系

Java对操作系统提供功能的封装,包含进程和线程

运行一个程序会产生一个进程,进程至少包含一个线程

每个进程对应一个JVM实例,多个线程共享JVM里的堆

Java采用单线程模型编程,程序会自动创建主进程

Sleep和Wait的区别

sleep是Thread类的方法,wait是Object类定义的方法

sleep可以在任何方法中使用,wait方法需要获取到锁才能使用也就是sychronized中使用

主要区别

sleep会让出CPU,不会导致锁行为的改变

Object.wait不仅会让出锁,还会释放同步资源

synchronized底层实现原理

Monitor:每个Java对象天生有个Monito锁

Monitor锁的竞争和释放

c2413555b0d6b768ef050aa8b520c81a.png

早期版本的synchronized使用操作系统的Mutex Lock;

用户态切换到系统态很慢

自旋锁与自适应锁

自旋锁

许多情况下,共享资源占用的时间是很短的,切换线程不值得

通过让线程执行忙循环等待锁的释放,不让出CPU

缺点:如果线程占用锁的时间过长,会带来性能上的开销

自适应锁

自旋的次数不在固定

由前一次在同一个锁上的自旋次数及锁拥有者的状态来决定

锁消除

在JIT期间,消除程序中不可能出现锁竞争代码锁申请的锁

锁粗化

消除对同一方法中同时多次加锁

锁膨胀

无锁→偏向锁→轻量锁→重量锁

一般情况下是不可退化的

偏向锁

核心思想:

​如果一个线程获得了锁,锁进入偏向模式,此时Mark Word的结构也变为偏向结构,当该线程再次请求锁时,无需在做任何同步操作,即获取锁的过程中只需要检查Mark Word的锁标记位为偏向锁以及当前线程的ID等于Mark Word的Thread ID即可,可以省去大量申请锁的时间

轻量锁

核心思想:

​轻量级锁是有偏向锁膨胀而来,在一个线程进入同步块的情况下,另外一个线程也进入同步块,发生锁争用就会转为轻量级锁

若存在多个线程竞争同步块,会膨胀为重量锁

优点

缺点

使用范围

偏向锁

加锁和解锁不需要采用CAS操作,没有额外的性能消耗,和执行非同步方法相比仅差纳秒级

如果线程之间存在锁的竞争,会带来额外的消耗

只有一个线程访问同步块或者同步代码的情况

轻量锁

竞争的线程不阻塞,提高了响应速度

若线程长时间抢不到锁,自旋会影响CPU性能

线程交替执行同步代码或者同步方法的情况

重量锁

线程竞争不会自旋,不会消耗CPU

线程阻塞,响应时间缓慢,在多线程的情况下,频繁的获取释放锁,会带来巨大的性能消耗

追求吞吐量,同步块或者同步时间较长的场景

锁的内存定义

​当线程释放锁时,Java内存模型会把线程对应的本地内存变量刷新到主内存中

​而当线程获取锁时,Java内存模型会把线程获取的主内存空间设置为无效,从而使得被监视器保护的临界区代码必须从主内存中读取共享变量

..%5Cmg%5C1550988650528.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值