- 博客(5)
- 收藏
- 关注
转载 Java Integer和String内存存储
先看代码:void foo(){ Integer i1 = 2; Integer i2 = 2; Integer i3 = new Integer(2); System.out.println("i1 = i2? " + (i1 == i2)); //true System.out.println("i1 = i3? " + (i1 == i3)); ...
2018-04-15 15:01:44 123
转载 线程可见性
1.可见性一个线程对共享变量值得修改,能够及时的被其他线程看到。2.共享变量如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。3.Java内存模型描述了Java程序中各种变量(线程共享变量)的访问规则,以及在jvm中将变量存储到内存和内存中读取出变量这样的底层细节。所有的变量都存储在主内存中。每股线程都有自己独立的工作内存,里面保存该线程所使用到的变量副本(主内存...
2018-04-14 11:43:22 165
原创 竞态条件的内置锁与重入
Java提供一种内置的锁机制来支持原子性:同步代码块Synchronized。synchronized可用来修饰需要加锁的变量或引用,也可以用来修饰方法。内置锁拥有重入机制,即如果一个线程试图拥有一个已经由它自己获得的锁,那么再次请求获得锁可以成功。一种实现方法是JVM为每个内置锁设置一个获取计数值和所有者属性。当计数值为0是,表示未被占有。当有一个线程请求占有时,JVM会记录占有者并将计数值加一...
2018-04-13 16:18:39 114
原创 竞态条件学习笔记
竞态条件指的是不恰当的线程执行时序导致产生不正确的结果。常见情况有“先检查后执行”。即通过一个可能失效的观测结果来决定下一步的动作。比如线程A检查文件X是否存在,若发现不存在,则创建一个新的文件X。但这个观测结果可能无效,比如在观测到文件不存在到创建文件期间,线程B创建了文件X,会导致各种问题。“先检查后执行”的情况在延迟初始化中也会遇到。延迟初始化指在需要用到对象时才进行初始化。比如在单例模式中...
2018-04-13 15:40:49 269
原创 有状态对象与无状态对象
有状态对象是拥有实例变量的对象,可以保存数据,不是线程安全的。class User{ String name; //实例变量 static id;//静态变量}无状态对象是一次操作,不能保存数据,没有实例变量,是线程安全的。...
2018-04-13 15:03:57 190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人