Java开篇
栏目持续更新中
一、引言
Java基础是全站的开篇,但是这个系列只会整理Java基础类库的使用和最新特性以及一些底层原理和源码解读,不会赘述JDK的安装配置和面向对象等最基础的内容。

二、Java版本发展
- 1990年末, Sun公司成立了一个由James Gosling领导的”Green 计划”,准备为下一代智能家电 (如电视机、微波炉、电话)编写一个通用控制系统,在尝试了使用C++和改造C++未果后,决定创造一种全新的语言: Oak
- 1992年夏,Green计划己经完成了新平台的部分功能,包括Green操作系统、Oak的程序设计语言、类库等
- 1994年,互联网和浏览器的出现,开发组意识到Oak非常适合于互联网,对Oak进行了小规模的改造运行在浏览器,并更名为Java
- 1995年初,Sun推出了Java语言
- 1996年初,发布JDK1.0,这个版本包括两部分: 运行环境(JRE)和开发环境(JDK)
- 1997年2月,发布JDK1.1,增加了JIT(即时编译)编译器
- 1998年12月,Sun发布了Java历史上最重要的JDK版本:JDK1.2,伴随JDK1.2一同发布的还有JSP/Servlet、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本
- 2002年2月,Sun发布了JDK历史上最为成熟的版本: JDK1.4
- 2004年10月,发布里程式板本:JDK1.5,为突出此版本的重要性,更名为JDK5.0(Java5),同时,Sun将J2EE、J2ME也相应地改名为Java EE和Java ME,增加了诸如泛型、增强的for语句、可变数量的形参、注释 (Annotations)、自动拆箱和装箱等功能
- 2006年12月,Sun公司发布了JDK1.6(Java6)
- 2009年4月20日,Oracle宣布将以每股9.5美元的价格收购Sun
- 2011年,发布JDK1.7(Java7),是Oracle来发布的第一个Java版本,引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。
- 2014年,发布Java8,是继Java5以来变化最大的版本,带来了全新的Lambda表达式、流式编程等大量新特性,具体见:Java8的新特性
- 2017年9月,发布Java9,提供了超过150项新特性,主要包括模块化系统,jshell交互工具,jdk编译工具,java公共API以及安全增强,而且采用了更高效、更智能的G1垃圾回收器,完全对Java体系进行了改变,让庞大的Java语言更轻量化。从Java9开始,Java版本更迭从特性驱动改为时间驱动,每个版本之间的更迭周期调整为6个月,但是LTS版本的更迭时间为3年。同时将Oracle JDK的原商业特性进行开源。
- 2018年3月,发布Java10
- 2018年9月,发布Java11
三、Java核心类库
3.1 JDK基础类库
待续
3.2 数据结构 (Collection,Map,Set)
待续
3.3 输入输出 (IO/NIO)
在Java中,和IO有关的操作封装在java.io和java.nio中,传统IO(java.io)是以流的形式实现输入输出操作的,还有基于通道和缓冲区的NIO(java.nio)
I/O操作,有阻塞和非阻塞之分:
- 阻塞:发起读取数据的线程是被阻塞的
- 非阻塞:发起读取数据的线程不被阻塞,直接返回
也有同步和异步之分:
- 同步:数据读取完成后,直接在接收到数据的线程上,紧接着进行拷贝操作
- 异步:数据读取完成后,通过一个回调函数,在新的线程处理数据的拷贝
阻塞非阻塞和同步异步,描述的阶段和描述的事情是不同的,因此可以自由组合,Java语言将其组合为分为BIO,NIO,和AIO三种不同的IO,与Linux的IO模型(详见:浅谈Linux(Unix)的I/O模型)对应的话,BIO对应的是Blocking I/O
BIO
同步的,阻塞的IO,位于
java.io包下,是Java的传统IO,基于流,IO流的分类方式有很多,按照方向分为输入流和输出流,按照数据传输单位又能分为字节流和字符流NIO
同步的,非阻塞的IO,位于
java.nio包下AIO
异步的,非阻塞的IO,也位于
java.nio包下
3.4 网络 (Socket)
3.5 线程 (Thread)
本部分主要讲述了使用Java语言来实现多线程的程序,包括线程的创建方式,线程基本方法的使用,多线程操作共享数据导致的安全问题以及死锁现象的原因和避免死锁,多线程运行过程中的协作和通信机制以及调用各种线程的方法时线程状态和生命周期的改变等。
| 序号 | 文章名 | 概述 |
|---|---|---|
| 1 | Java的线程和常见方法 | 进程和线程,并发和并行,线程的创建和常见方法 |
| 2 | Java线程安全和同步机制 | 多线程导致的问题,线程的同步机制,死锁 |
| 3 | Java线程间的通信机制 | 线程的通信,等待唤醒机制wait/notify |
| 4 | Java线程的状态 | 不同线程状态之间的转换过程 |
| 5 | volatile作用分析 | volatile关键字的作用,可见性、原子性和重排序 |
3.6 并发编程 (JUC)
JUC就是Java在并发编程中使用的工具包java.util.concurrent的简称,包括java.util.concurrent,java.util.concurrent.atomic,java.util.concurrent.locks等,起始于JDK1.5,是Java语言中增强版的多线程和高并发工具,拥有更加强大的多线程实现,本章内容会介绍些JUC中常用的并发编程工具类及其实现原理,需要在理解了第3.5小节的线程一章的基础上学习
主要涉及:
- 锁,可重入锁,公平/非公平锁,读写锁相关:
java.util.concurrent.locks.Lock,java.util.concurrent.locks.Condition,java.util.concurrent.locks.ReadWriteLock - 异步计算
java.util.concurrent.CompletableFuture,java.util.concurrent.FutureTask,java.util.concurrent.Callable - 阻塞队列
java.util.concurrent.BlockingQueue - 线程池
java.util.concurrent.ExecutorService - 任务拆分合并工具
java.util.concurrent.ForkJoinPool,java.util.concurrent.ForkJoinTask等 - 线程安全容器
java.util.concurrent.CopyOnWriteArrayList,java.util.concurrent.ConcurrentHashMap,java.util.concurrent.CopyOnWriteArraySet等 - 并发控制工具
java.util.concurrent.CountDownLatch,java.util.concurrent.CyclicBarrier,java.util.concurrent.Semaphore等 - 各种原子类,例如
java.util.concurrent.atomic.AtomicInteger,java.util.concurrent.atomic.AtomicReference - 多线程编程的一些问题:缓存行对齐、锁的粗化,消除等
| 序号 | 文章名 | 概述 |
|---|---|---|
| 1 | JUC可重入锁ReentrantLock | ReentrantLock实现更精准的锁操作 |
| 2 | JUC读写锁ReadWriteLock | ReadWriteLock读写锁实现读写分离 |
3.7 反射 (Reflect)
待续
3.8 JDK其他工具和类
| 序号 | 文章名 | 概述 |
|---|---|---|
| 1 | Java实现LDAP登录 | 使用Java与LDAP进行交互 |
四、Java的设计模式
| 序号 | 文章名 | 概述 |
|---|---|---|
| 1 | Java单例 | Java中单例模式的几种实现形式 |
五、参考
- 《疯狂Java讲义》,作者:李刚,电子工业出版社,2018年1月
- 《深入理解Java核心技术》,作者:张洪亮,电子工业出版社,2022年5月
- 《Effective Java》,作者:Joshua Bloch,机械工业出版社,2009年1月
"如果文章对您有帮助,可以请作者喝杯咖啡吗?"
微信支付
支付宝