打卡线程安全之并发第一天

1、Java的线程安全

关于Java中 线程安全的问题,首先需要去知道, 什么是线程安全?为什么会出现线程安全?及如何保证线程安全,线程不安全又会怎样等一系列问题?

什么是线程安全

ps:首先需要知道线程和进程的区别,及各自的意义

  1. 线程安全是指
    当多个线程同时访问同一个对象时,(如果不用考虑这些线程在运行是环境下的调度和交替执行,也不需要额外的同步,或者在调用方进行任何其他协调操作) 调用这个对象的行为都可以获取到正确的结果,那就称这个对象是线程安全的

  2. Java中的线程安全
    当涉及线程安全时,前提一定是多个线程存在对于共享数据访问时,在书中对于线程安全,从线程安全的程度来分类:
    1.不可变
    2. 绝对线程安全
    3. 相对线程安全
    4. 线程兼容
    5. 线程独立

  3. 不可变 : 在Java语言中, 不可变对象【 Immutable】一定是线程安全的(为什么呢?后面会解答)—如,final 关键字所带来的可见性
    譬如: 在Java类中的,java.lang.String;当使用者调用其subString (),repalce(),concat(),这些方法都不会影响其原来的值。只会返回一个new构造的字符串对象;java.lang.Number中的部分子类,Long,Double,BIgIntrger,BigDecimal 等数据类型,还有枚举类型

  4. 绝对线程安全 : 举个栗子,java.util.Vector 是一个线程安全的容器,他的add(),get(),size().等方法都是会被synochronized修饰的,这样已经具备了内存模型的三个特性,但是当我们试用其方法时,不在额外的做些同步措施,也还是会出现线程不安全的问题,那如果他需要做的绝对的线程安全,必须在调用其方法时,额外采取一定的同步措施,来保证绝对的线程安全

  5. 线程兼容 :是指对象本身不安全,但是可以通过调用端正确的使用同步的手段来保证对象在并发 环境下,达到线程安全。就像我们通常说的这个来是线程不安全的

  6. 线程对立 : 是指不管是调用端采取了哪一种同步措施,都无法在多并发的情况下使用它,如Thread类中的suspend() 和resume() 方法,当这两个线程共享/持有一个线程对象是,目标线程就会出现死锁现象,也正是由于这个,这两个方法已被废弃。 比如System.setIn() 和 Sysytem.setOut()

结语

关于Java的内存模型,内存模型的特性,下一章节会讲。博文中一些概念来自于第三版《深入理解Java虚拟机》
[本文链接]:https://editor.csdn.net/md?articleId=106459683

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值