Java基础03

今天是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

    特性synchronizedReentrantLock
    锁获取方式自动获取/释放需要手动lock/unlock
    可中断性不可中断lockInterruptibly()
    公平锁非公平可配置公平策略
    条件变量wait/notifyCondition对象

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 -> "其他类型";
    };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值