多线程与高并发1-基础定义

进程和线程

进程是操作系统能够分配的最小单位
线程是操作系统能够调度的最小单位(一个程序的不同执行路径)

启动线程的三种方式

1.Thread 2.Runnable 3.Executors

sleep和yield

sleep线程进行睡眠,让出CPU给其他线程继续运行。到规定的时间唤醒
yield将当前线程回到等待队列中,返回到就绪状态,让出CPU

wait和notify

需要在同步中执行,notify并不会释放锁,wait才会释放锁

join

将并行执行转为串行执行

ThreadState线程状态

在这里插入图片描述

Synchronized

1、对某个对象加锁,只有拿到锁的才能执行下一步代码
2、在Hotspot中,通过对象头中64位,拿出两位(mark word)记录锁的状态。

 1.JVM早期,synchronize非常重量级,后来改进锁升级的概念。
 2.一个线程时,mark word仅记录了线程ID,并没有上锁(偏向锁)
 3.如果有线程征用,升级为自旋锁(处于用户态,执行时间较短,线程数比较少,使用自旋锁。执行时间较长,线程较多使用系统锁)
 4.如果在自旋10次后,仍未获得锁,升级为重量级锁,(OS)

3、synchronized(this) 等价于 synchronized方法
4、静态方法的synchronized等价于synchronize这个类
5、可重入锁:一个同步方法可以调用另外一个同步方法,一个线程已经拥有了某个对象的锁,再次申请的时候仍会得到该对象的锁
6、程序中出现异常,默认情况锁会被释放,导致等待线程乱入,产生数据不一致问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值