多线程关键字,以及多线程的安全问题(原子性、可见性、有序性)

多线程关键字:效率(性能)  、  安全

多线程的安全问题:
  多线程安全应该是第一位的,需要在保证安全的前提尽可能地提高性能
不安全原因:原子性、可见性、代码顺序性
【 原子性】:在某个环境下,不可被分割(包括被中断、造成成结果不正确等)操作(简单地说原子性就是指一个不可被中断的操作,在多个线程中一起执行的时候,一个操作一
旦开始就不会被其他线程所干扰)  CPU指令执行的原子性,是否满足同一个时间点共享变量的安全性。对于代码块来说,保证代码块的原子性
  对于共享变量,基本数据类型赋值操作是原子性。但不包括64位的long/double操作
   经典的非原子性的单条指令:n++/n--/new Object()
【可见性】(主内存到工作内存的值拷贝)
工作内存和主内存的一致性(对于每个线程来说,这个共享变量也是不可见的),针对不同线程,不同线程上下文进行切换的时候,共享区域 堆 方法区 常量池 (主
内存)拷贝到工作内存
因为线程上下文,线程轮转的原因,每个线程有自己的工作内存(可以理解为栈,自己私有的,别的线程看不见,)
涉及到值的拷贝,线程各自修改是看不见的
保证可见性,在同步范围内执行完成之后,释放锁同时会返回到内存
 【有序性】JVM和CPU对执行指令的优化——指令 重排序
对于某个线程看自己内部的代码,都是有序的,而在其他线程看来,都是无序的
   DataSource ds=new MysqlDataSource()
  1、分配该对象内存空间
  2、对这个对象进行初始化操作
  3、把这个对象赋给ds引用

 

注意:

  开启run()方法就能顺序执行,start()就会并发执行
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值