- 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 是恢复一个线程。如果两个线程持有同一个对象,那么就会造成死锁的风险了。
线程的安全级别
最新推荐文章于 2022-02-28 09:09:43 发布