线程的安全级别

  • java  线程的定义:操作系统上拥有自己工作内存,共享同一个进程资源的CPU执行的基本单位。一个线程拥有自己的内存,执行一系列的指令去完成相应的操作,一个进程拥有多个线程。
  • 线程的出现最大程度上利用cpu的计算能力,使得进程的资源分配和调度相互分开,避免了Io等待等耗时操作时,CPU依然可以继续执行其他的操作。
  • 不可变:一个变量或对象时不可变的,那么变量或对象就是线程安全的。不可变意味着多线程访问的任何时候都没有状态的改变,那么肯定不会造成不一致状态的存在,由此可得多线程访问下一定可以获得正确的结果。
  • 比如String类,其方法都是返回一个新的对象。那么就不会出现竟态条件。
    public String substring(int beginIndex) {
            if (beginIndex < 0) {
                throw new StringIndexOutOfBoundsException(beginIndex);
            }
            int subLen = value.length - beginIndex;
            if (subLen < 0) {
                throw new StringIndexOutOfBoundsException(subLen);
            }
            return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
        }

     

  • 绝对线程安全:在任何运行状态下,其调用者不需要采用任何的同步协调方法,就能够获得正确的结果。
  • 相对线程安全:保证对一个对象的单独操作时安全的,那么称之为相对线程安全。大多数java类库声明的安全的类都是这个级别的。比如Vector.如果对Vector进行添加,删除都是安全的。但是如果多个线程操作同一个Vector对象,既有删除也有添加那么此时就不是安全的了。
  • 线程兼容:是指对象本身不是安全的,但是通过调用者的正确使用同步方式产生正确的调用结果。比如ArrayList 和HashMap等。
  • 线程对立:是指两个线程对同一个对象做出相反的操作,那么无论调用者是否采取同步措施,都会因为线程的互斥导致死锁。
  • 比如线程 的 suspend 和resume  方法。suspend 是中断一个线程,resume 是恢复一个线程。如果两个线程持有同一个对象,那么就会造成死锁的风险了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值