Java并发编程了解及学习

并发介绍

线程的优点: 1.提供资源的利用率 2.提高程序性能

线程的风险: 1. 死锁 2. 上下文切换 3. 线程安全

多线程的实现方式

  1. Thread类

  2. Runnable接口

  3. Callable

  4. future

当多个线程同一时间运行同一段代码,线程会竞争,成员变量就会产生问题。那么如何解决这类问题呢?

  1. 给方法加 synchronized(同步锁),建议给关键代码加 synchronized 代码块 这样效率会比加在方法上效率快。
    synchronized是个内部锁:对象内部给我们提供的锁,每个对象都会有个状态变量,每个线程去访问时,都要去判断它的状态变量。同时它也是个可重入锁,意思是:当一个线程去获取它已经持有的锁,它是能够成功的。锁是线程间互斥的,但是同一个线程是不会互斥的。synchronized能够解决可见性,原子性。
  2. Atomic原子性 当给成员变量加了原子性后,也相当于给成员变量加上了锁。但这个实现跟 synchronized 不一样,因为原子性并不会排队执行。

线程可见性、线程封闭

指令重排序:编译器和处理器为了提高程序的运行性能,对指令进行重新排序。但是如果某条指令是依据前面的指令而执行的,那么这条指令肯定是在最后执行的。

重排序分三种类型:

  • 编译器优化的重排序
    编译器在不改变单线程程序语义的前提下(代码中不包含synchronized关键字),可以重新安排

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值