今天是2025/03/11 16:31 day03
总路线请移步主页Java大纲相关文章
今天进行Java基础最后三个模块的归纳
首先是Java基础的相关内容概括的思维导图
重要性:
多线程->网络编程=新特性
Java基础03
七、多线程
7.1 线程创建方式对比
方式 | 实现方法 | 优缺点 |
---|---|---|
继承Thread类 | class MyThread extends Thread | 简单但无法多继承 |
实现Runnable接口 | new Thread(new MyRunnable()) | 推荐方式,可多实现接口 |
实现Callable接口 | FutureTask + ExecutorService | 可获取返回值,支持异常抛出 |
线程池创建 | Executors工具类创建 | 资源复用,性能最优 |
7.2 线程同步核心
-
synchronized锁升级过程
无锁 → 偏向锁 → 轻量级锁(CAS) → 重量级锁
-
Lock接口 vs synchronized
特性 synchronized ReentrantLock 锁获取方式 自动获取/释放 需要手动lock/unlock 可中断性 不可中断 lockInterruptibly() 公平锁 非公平 可配置公平策略 条件变量 wait/notify Condition对象
7.3 线程池原理
标准创建方式(避免使用Executors)
ThreadPoolExecutor executor = new ThreadPoolExecutor( 5, 核心线程数 10, 最大线程数 60L, 空闲线程存活时间 TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), 任务队列 new ThreadPoolExecutor.AbortPolicy() 拒绝策略 );
/四种拒绝策略对比
-
AbortPolicy:直接抛出异常(默认)
-
CallerRunsPolicy:用调用者线程执行
-
DiscardOldestPolicy:丢弃队列最老任务
-
DiscardPolicy:直接丢弃新任务
八、网络编程
8.1 TCP/UDP核心实现
-
TCP三次握手流程
客户端 → SYN → 服务端 服务端 → SYN+ACK → 客户端 客户端 → ACK → 服务端
-
Socket编程关键代码
// 服务端 ServerSocket server = new ServerSocket(8080); Socket socket = server.accept(); // 阻塞等待连接 // 客户端 Socket client = new Socket("127.0.0.1", 8080); // 数据读写 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
8.2 NIO核心组件
-
Selector多路复用机制
Selector selector = Selector.open(); channel.configureBlocking(false); channel.register(selector, SelectionKey.OP_READ); while(true) { int readyChannels = selector.select(); // 非阻塞 if(readyChannels == 0) continue; Set<SelectionKey> keys = selector.selectedKeys(); // 处理IO事件 }
-
ByteBuffer三要素
ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.put(data); // 写模式 buffer.flip(); // 切换读模式 buffer.get(); // 读取数据 buffer.clear(); // 重置缓冲区
九、新特性
9.1 Lambda表达式
-
函数式接口类型
接口 方法签名 典型应用场景 Supplier<T> T get() 延迟加载 Consumer<T> void accept(T t) 遍历集合 Function<T,R> R apply(T t) 数据转换 Predicate<T> boolean test(T t) 条件过滤 -
方法引用四种形式
ClassName::staticMethod // 静态方法引用 instance::method // 实例方法引用 ClassName::new // 构造器引用 ClassName::instanceMethod // 任意对象方法引用
9.2 Stream API
-
操作类型对比
操作类型 特点 常见方法 中间操作 延迟执行 filter()/map()/sorted()/distinct() 终端操作 触发执行 forEach()/collect()/count()/reduce() -
并行流注意事项
List<Integer> nums = Arrays.asList(1,2,3); // 正确使用方式 int sum = nums.parallelStream() .mapToInt(Integer::intValue) .sum(); // 避免共享可变状态 // 使用线程安全收集器 List<Integer> syncList = nums.parallelStream() .collect(Collectors.toCollection(CopyOnWriteArrayList::new));
9.3 其他重要特性
-
模块化系统(JDK9)
module com.myapp { requires java.base; requires transitive java.sql; exports com.myapp.api; opens com.myapp.internal; }
-
记录类(JDK14)
public record User(String name, int age) { // 自动生成:全参构造、equals、hashCode、toString } // 使用示例 User user = new User("Alice", 30);
-
模式匹配(JDK17预览)
instanceof模式匹配 if (obj instanceof String s) { System.out.println(s.length()); } // switch模式匹配 return switch (obj) { case Integer i -> "整数: " + i; case String s && !s.isEmpty() -> "字符串: " + s; default -> "其他类型"; };