谈谈对java的理解-创新互联
1、java一次编译,到处执行----跨平台
创新互联长期为上1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为乌鲁木齐企业提供专业的成都网站设计、成都网站制作,乌鲁木齐网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。2、gc
3、jre和jdk 区别:
jre(java runtime environment)java运行环境,包含jvm的client,类库(rt.jar:常用的集合、io、math、lang等都在rt.jar包内)
jdk(java development kit)java开发工具,包含jre(含jvm的client和server)及编译器(javac)、诊断工具(jconsole.exe等)
4、java基础类库:(java开头)
java.lang(exception/string/stringbuffer/Integer等封装类/math/annotion)
java.util(concurrent/regex正则表达式/collection/日期date calendar)
参考 https://blog.csdn.net/basycia/article/details/50769838
5、java常用第三方类库:(javax开头)
javax.swing、javax.naming
6、cas原理
java.util.concurrent包下的类都使用的是cas原理实现并发,例如 automicInteger、concurrentHashMap
主存A,线程缓存数据B,更新值C,只有当B=A时,才会将 C赋值给A。
7、并发特性,可用syn、lock方式实现
原子性
有序性:jvm执行java代码时在保证不影响运行结果情况下会进行指令重排,有序性是避免指令重排。
内存可见
8、volatile关键字
可保证内存可见:线程A修改后立即将数据写入主内存。
有序性:修饰的关键字不被指令重排。保证在执行关键字相关操作时,之前的代码已经执行,之后的代码还未执行,但不能保证关键字之前和之后代码的顺序性。
不能保证原子性。
volatile一个典型的应用场景是 单例模式
class Singleton{ private volatile static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if(instance==null) { synchronized (Singleton.class) { if(instance==null) instance = new Singleton(); } } return instance; } }为什么单例模式需要使用volatile修饰?
主要在于instance = new Singleton()这句,这并非是一个原子操作,事实上在 JVM 中这句话大概做了下面 3 件事情:
1.给 instance 分配内存
2.调用 Singleton 的构造函数来初始化成员变量
3.将instance对象指向分配的内存空间(执行完这步 instance 就为非 null 了)。
但是在 JVM 的即时编译器中存在指令重排序的优化。也就是说上面的第二步和第三步的顺序是不能保证的,最终的执行顺序可能是 1-2-3 也可能是 1-3-2。如果是后者,则在 3 执行完毕、2 未执行之前,被线程二抢占了,这时 instance 已经是非 null 了(但却没有初始化),所以线程二会直接返回 instance,然后使用,然后顺理成章地报错。
参考:
你真的了解volatile关键字吗?
深入浅出CAS
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:谈谈对java的理解-创新互联
网页网址:http://cdiso.cn/article/cecipd.html