多线程基础原则

Java 代码优化

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

顺序 vs 并行执行

  • 顺序处理 -> 操作依次执行
  • 并行处理 -> 多个操作同时执行

如何实现?

  • 现代 CPU 具有多核
  • 线程:程序执行的最小单元
  • 多线程将工作分配到这些内核

单线程像单车道,车辆需依次前进;多线程像多车道,车辆可并行通行。

Java 代码优化

使用线程

  • Thread 类可创建新的执行路径
  • 每个 Thread 可独立执行
Runnable task = () -> {
    System.out.println("Processing on thread: " + 
                       Thread.currentThread().getName());
};

Thread thread = new Thread(task);
thread.start();
Processing on thread: Thread-0
Java 代码优化

多线程处理

List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 4; i++) {
    Thread thread = new Thread(() -> System.out.println("Processing data on Thread-" + i));
    threads.add(thread);
    thread.start();
}

for (Thread t : threads) {
    t.join(); // Waits for all threads to complete
}
// Processing data on Thread-0
// Processing data on Thread-2
// Processing data on Thread-1
// Processing data on Thread-3
Java 代码优化

并行流

  • 流(Streams):Java 8+ 简化并行的特性
  • 自动处理线程创建与管理
  • 两种创建方式:
    • collection.parallelStream()
    • Stream.of(...).parallel()
Java 代码优化

并行流示例

// Sequential processing
List<Integer> result1 = new ArrayList<>();
for (int i = 0; i < numbers.size(); i++) {
    result1.add(numbers.get(i) * 2);
}

// Sequential processing with stream List<Integer> result2 = numbers.stream() .map(n -> n * 2) .collect(Collectors.toList());
// Parallel processing with parallel stream List<Integer> result3 = numbers.parallelStream() .map(n -> n * 2) .collect(Collectors.toList());
Java 代码优化

何时使用并行处理

  • CPU 密集型操作
  • 独立的数据处理
  • 大规模数据集
  • 可用 CPU 内核 > 1
  • 并行化开销不值得用于:
    • 小数据集
    • 简单操作
Java 代码优化

小结

  • 使用 Thread 类创建并行执行路径
  • 并行流简化集合处理
  • 效益取决于:
    • 负载类型
    • 数据规模
    • 可用内核数
Java 代码优化

Passons à la pratique !

Java 代码优化

Preparing Video For Download...