查看原文
其他

2018-05-31


Java技术栈

不可错过的 Java 技术公众号

 


其实学习 Java 就是学习面向对象多线程


精通java的最终目标就是学习面向对象,在JAVA的类库里面有很多的骨架实现。设计模式的出现要比java早很多年。设计模式的思想的作者或鼻祖是缘于一个砖匠,搬砖的砖。


你们应该很庆幸设计模式就只有20几种,终归到底是缘于java的特性也就这么几个。国外做过研究人能同时记住的东西是7±2。很巧的是java的特性也就7±2。但是7±2也就最多组成20几种设计模式。


好了问题来了,你能记住几个java特性(java特性最多也就是9个哦),如果你能全部记住,那么问题升华了,你精通多少种设计模式。如果你们背的话,我能从1背到10亿。



还有就是多线程。多线程只能说太难了,java在多线程的上很落后的。Volatile关键字反反复复跟新了几次背后原理实现,对于伪共享的实现也是在1.8才加入@sun.misc.Contended的。多线程,伪共享,锁机制,同步机制,重锁机制。这些在15年前是高级课题,也是为什么很多java书籍都把多线程放在最后一章节。也是15年前存在的东西。


看到没有,就算是人家把java开源你们在技术上也会落后15年,因为JDK现在才到1.8。为什么是15年前,因为15年前摩尔定律不再适用了,intel的老板跪在地上说,如果CPU超过4.0G我公司要倒闭了。所以多核的时代来临了。


回过头来为什么说多线程难,学习多线程,你要搞清楚同步,异步,管程(什么是管程,就是java文件代码上加了synchronized关键字后,变成class文件后。synchronized关键字变成了java虚拟机的Moniters命令的中文翻译),锁机制,阻塞,以及线程的几种状态。



什么顺序一致性,原子性,有锁,无锁。安全性,读写同步/读不用同步,写同步。多核,compareAndSet(),getAndSet(),伪共享,高速缓存,Volatile关键字,系统总线,等等等等。


多线程机制虽然多,但是这不是思想的重要性。再我看来最重要的就是为什么10年就有AtomicInteger为什么现在只在原来的基础上跟新了一个LongAdder, 为什么这两个类都是同一个老头写的而不是年轻人。为什么这两个类都引用了sun.misc.Unsafe这个非公开类。为什么是不安全的,现在发现多线程是有多难了吧。。


觉得有用就转发分享一下吧


往期推荐

 

【1】switch case 支持的 6 种数据类型!

【2】Spring Boot & Cloud 最强教程

【3】教你如何监控 Java 线程池运行状态

【4】到底什么是跨域?附解决方案!

【5】图解分布式架构的演进!

点击阅读原文,更多技术干货!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存