多线程高并发1

@多线程高并发

进程、线程的概念

  • 进程:可以简单的理解为一个可以独立运行的程序单位,它是线程的集合,进程就是有一个或多个线程构成的。
  • 线程:一个程序有不同的执行路径就叫做一个线程。

创建线程的方法

  • 继承Thread
  • 实现Runnable接口

常用的方法

  • Sleep() 睡眠
  • yeild() 让出一下cpu
  • join() 等待另一个线程的结束

线程状态

  • New
  • Runnable Ready ------线程被调度器选中执行------->Running
  • ThreadWaiting
  • Waiting
  • Blocked 等待进入同步代码块的锁
    -Terminated

锁升级的概念

	sync(Object)
	markword 记录线程id(偏向锁)
	如果发生线程争用,升级为 自旋锁
	默认旋10次,如果还得不到锁,就升级为重量级锁-OS
	
执行时间长(加锁代码),线程数比较多,尽量用系统锁,即sync
执行时间短,线程数少,用自旋锁
锁只能升级不能降级
等待中的锁是不占用CPU的

线程同步

  • synchronized(Object)
    不能用String常量 Integer Long
  • 锁的是对象不是代码
  • this xx.class(static方法前加synchronized,类似于锁定当前类)
  • 锁定方法 非锁定方法 同时进行
  • 锁升级的概念
    偏向锁 自旋锁 重量级锁
    -synchronized必须是可重入锁,锁的是同一个对象,否则会造成死锁。
    程序中如果出现异常锁,默认情况下是会被释放的。有异常的情况要多加小心,会出现数据不一致的情况。

volatile

  • 保证线程的可见性
    MESI
    缓存一致性协议
  • 禁止指令重排序(CPU)
  • DCL单例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值