惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
爱范儿
爱范儿
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
博客园 - 聂微东
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
罗磊的独立博客
Jina AI
Jina AI

Liu Zijian's Blog | 一个技术博客

使用Certbot自动续签HTTPS证书 使用Filebeat采集Nginx日志到ES Python的协程 Python中的异常 Python中的类和对象 Python的函数 Python的数据结构,推导式、迭代器和生成器 Spring AI集成多模态模型 LangChain4j多模态 LangChain Tools工具使用 Python中的模块和包 Python全局环境和虚拟环境(venv) LangChain Prompt提示词工程 LangChain4j Tools工具使用 基于Dify搭建AI智能体应用 LangChain4j RAG检索增强生成 Spring AI实现MCP Server Spring AI集成MCP Client LangChain4j Prompt提示词工程 Spring AI使用知识库增强对话功能 Spring AI实现一个智能客服 Spring AI实现一个简单的对话机器人 实现MinIO数据的每日备份 自己实现一个DNS服务 简单理解AI智能体 大模型和大模型应用 LangChain开篇 LangChain4j开篇 一个解析Excel2007的POI工具类 DataPermissionInterceptor源码解读
Java开篇
Liu Zijian · 2021-12-29 · via Liu Zijian's Blog | 一个技术博客

栏目持续更新中

一、引言

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.iojava.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.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks等,起始于JDK1.5,是Java语言中增强版的多线程和高并发工具,拥有更加强大的多线程实现,本章内容会介绍些JUC中常用的并发编程工具类及其实现原理,需要在理解了第3.5小节的线程一章的基础上学习

主要涉及:

  • 锁,可重入锁,公平/非公平锁java.util.concurrent.locks.Lockjava.util.concurrent.locks.Condition
  • 读写锁相关java.util.concurrent.locks.ReadWriteLock
  • 异步计算 java.util.concurrent.CompletableFuturejava.util.concurrent.FutureTaskjava.util.concurrent.Callable
  • 阻塞队列 java.util.concurrent.BlockingQueue
  • 线程池 java.util.concurrent.ExecutorService
  • 任务拆分合并工具 java.util.concurrent.ForkJoinPooljava.util.concurrent.ForkJoinTask
  • 线程安全容器 java.util.concurrent.CopyOnWriteArrayListjava.util.concurrent.ConcurrentHashMapjava.util.concurrent.CopyOnWriteArraySet
  • 并发控制工具 java.util.concurrent.CountDownLatchjava.util.concurrent.CyclicBarrierjava.util.concurrent.Semaphore
  • 各种原子类,例如java.util.concurrent.atomic.AtomicIntegerjava.util.concurrent.atomic.AtomicReference
  • 多线程编程的一些问题:缓存行对齐、锁的粗化,消除等

3.7 反射 (Reflect)

待续

3.8 JDK其他工具和类

序号 文章名 概述
1 Java实现LDAP登录 使用Java与LDAP进行交互

四、Java的设计模式

序号 文章名 概述
1 Java单例 Java中单例模式的几种实现形式

五、参考

  1. 《疯狂Java讲义》,作者:李刚,电子工业出版社,2018年1月
  2. 《深入理解Java核心技术》,作者:张洪亮,电子工业出版社,2022年5月
  3. 《Effective Java》,作者:Joshua Bloch,机械工业出版社,2009年1月