当前位置: 首页 > news >正文

JavaSE高级-02

文章目录

  • 1. 多线程
    • 1.1 创建线程的三种方式
      • 多线程的创建方式一:继承Thread类
      • 多线程的创建方式二:实现Runnable接口
      • 多线程的创建方式三:实现Callable接口
      • 三种线程的创建方式对比
      • Thread的常用方法
    • 1.2 线程安全
      • 线程同步
      • 方式一:同步代码块
      • 方式二:同步方法
      • 方式三:lock锁
    • 1.3 线程池
      • 什么是线程池
      • 创建线程池
        • 方式一:通过ThreadPoolExecutor创建线程池
          • 1. 处理Runnable任务
          • 2. 处理Callable任务
        • 方式二:通过Executors创建线程池
    • 1.4 并发、并行
  • 2. 网络编程
    • 2.1 IP地址
    • 2.2 端口
    • 2.3 通信协议
      • UDP协议
      • TCP协议
      • BS架构的原理
  • 3. 几个重要的类
    • 3.1 时间相关的获取方案
    • 3.2 字符串的高效操作方案
    • 3.3 BigDecimal
  • 4. 单元测试
  • 5. 反射
    • 5.1 反射获取Class对象
    • 5.2 反射获取类中的成分并操作
    • 5.3 反射的基本作用
  • 6. 注解
    • 6.1 自定义注解
    • 6.2 元注解
    • 6.3 注解的解析(反射)
  • 7. 动态代理

1. 多线程

线程(Thread)是一个程序内部的一条执行流程。
程序中如果只有一条执行流程,那这个程序就是单线程的程序。

1.1 创建线程的三种方式

多线程的创建方式一:继承Thread类

在这里插入图片描述

多线程的创建方式二:实现Runnable接口

在这里插入图片描述
在这里插入图片描述

多线程的创建方式三:实现Callable接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三种线程的创建方式对比

在这里插入图片描述

Thread的常用方法

在这里插入图片描述

1.2 线程安全

多个线程,同时操作同一个共享资源的时候,可能会出现业务安全问题。在这里插入图片描述

线程同步

线程同步是线程安全问题的解决方案。
核心思想:让多个线程先后依次访问共享资源,这样就可以避免出现线程安全问题。
常见方案加锁。即每次只允许一个线程加锁,加锁后才能进入访问,访问完毕后自动解锁,然后其他线程才能再加锁进来。

方式一:同步代码块

在这里插入图片描述
在这里插入图片描述

方式二:同步方法

在这里插入图片描述
在这里插入图片描述

方式三:lock锁

在这里插入图片描述
在这里插入图片描述

1.3 线程池

什么是线程池

在这里插入图片描述

创建线程池

在这里插入图片描述

方式一:通过ThreadPoolExecutor创建线程池

在这里插入图片描述
ExecutorService的常用方法
在这里插入图片描述
线程池的注意事项
在这里插入图片描述

1. 处理Runnable任务

在这里插入图片描述

2. 处理Callable任务

在这里插入图片描述

方式二:通过Executors创建线程池

在这里插入图片描述
Executors使用可能存在的陷阱
在这里插入图片描述
在这里插入图片描述

1.4 并发、并行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 网络编程

基本的通信架构
基本的通信架构有2种形式:CS架构( Client客户端/Server服务端 )、BS架构(Browser浏览器/Server服务端)。

Java提供了哪些网络编程解决方案?
java.net.*包下提供了网络编程的解决方案。

网络编程三要素:IP、端口、协议

2.1 IP地址

在这里插入图片描述
在这里插入图片描述
IP域名
在这里插入图片描述
DNS域名解析
在这里插入图片描述
公网IP、内网IP
在这里插入图片描述
InetAddress类
在这里插入图片描述

2.2 端口

用来标记标记正在计算机设备上运行的应用程序,被规定为一个 16 位的二进制,范围是 0~65535。
在这里插入图片描述

2.3 通信协议

开放式网络互联标准:OSI网络参考模型
在这里插入图片描述
传输层的2个通信协议
在这里插入图片描述

UDP协议

在这里插入图片描述UDP通信的实现
在这里插入图片描述
在这里插入图片描述

TCP协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
TCP通信的实现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

BS架构的原理

在这里插入图片描述在这里插入图片描述
每次请求都开一个新线程,到底好不好?
高并发时,容易宕机!解决办法:使用线程池优化。

3. 几个重要的类

3.1 时间相关的获取方案

在这里插入图片描述
在这里插入图片描述

3.2 字符串的高效操作方案

在这里插入图片描述
StringBuilder
在这里插入图片描述

3.3 BigDecimal

用于解决浮点型运算时,出现结果失真的问题。

BigDecimal的常见构造器、常用方法
在这里插入图片描述

4. 单元测试

单元测试就是针对最小的功能单元:方法,编写测试代码对其进行正确性测试。

Junit单元测试框架
可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,比如IDEA)
在这里插入图片描述
Junit单元测试的使用步骤
在这里插入图片描述

5. 反射

反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)。

5.1 反射获取Class对象

在这里插入图片描述

5.2 反射获取类中的成分并操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 反射的基本作用

在这里插入图片描述

6. 注解

在这里插入图片描述

6.1 自定义注解

在这里插入图片描述
注解的原理
在这里插入图片描述
注解的作用
在这里插入图片描述

6.2 元注解

指的是:注解注解的注解。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3 注解的解析(反射)

在这里插入图片描述

7. 动态代理

如何为Java对象创建一个代理对象?
在这里插入图片描述

http://www.xdnf.cn/news/1325179.html

相关文章:

  • Read Frog:一款开源AI浏览器语言学习扩展
  • 网络基础——协议认识
  • 视觉语言导航(2)——VLN RNN TRANSFORMER 与ATTENTION 2.2+LSTM(单独一节)
  • 构建情感智能体:下一代AI心理助手的架构与实践
  • Lucene 8.5.0 的 `.pos` 文件**逻辑结构**
  • 基于JS实现的中国象棋AI系统:多模块协同决策与分析
  • leetcode4_452 and 763
  • 一道同分排名的SQL题
  • Django开发Web应用
  • Dubbo 的SPI
  • 15.三数之和
  • vue3 el-table-column 列头添加 图标按钮
  • 使用websockets中的一些问题和解决方法
  • day25|学习前端js
  • Day7--滑动窗口与双指针--1695. 删除子数组的最大得分,2958. 最多 K 个重复元素的最长子数组,2024. 考试的最大困扰度
  • JavaSE——高级篇
  • Java面试宝典:Redis 入门与应用
  • Poisson分布:稀有事件建模的理论基石与演进
  • 用随机森林填补缺失值:原理、实现与实战
  • 力扣hot100:移动零问题的巧妙解决:双指针与原地交换策略(283)
  • 开发避坑指南(28):Spring Boot端点检查禁用失效解决方案
  • Vue3 中使用 Element Plus 完整指南
  • Spring AI Alibaba 项目接入兼容 OpenAI API 的大模型
  • 杂记 05
  • 母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南
  • Android使用Kotlin协程+Flow实现打字机效果
  • Python 作用域 (scope) 与闭包 (closure)
  • 【学习嵌入式-day-27-进程间通信】
  • Docker常见指令速查
  • 用户认证技术