多线程编程是指在一个程序中同时运行多个线程,每个线程执行不同的任务。Java 提供了 Thread
类和 Runnable
接口来实现多线程编程。通过多线程,可以充分利用多核处理器的优势,提高程序的执行效率。
Java 中的多线程主要有两种实现方式:
Thread
类:创建一个新的类,继承 Thread
类,并重写 run
方法。Runnable
接口:创建一个新的类,实现 Runnable
接口,并实现 run
方法。多线程适用于以下场景:
下面是一个使用多线程计算 1 到 100,000,000 之间数字总和的示例代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicLong;
public class MultiThreadSum {
private static final int NUM_THREADS = 4; // 线程数
private static final int MAX_NUM = 100_000_000; // 最大数字
private static AtomicLong totalSum = new AtomicLong(0); // 原子变量用于线程安全的累加
public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(NUM_THREADS);
long chunkSize = (long) MAX_NUM / NUM_THREADS;
for (int i = 0; i < NUM_THREADS; i++) {
long start = i * chunkSize + 1;
long end = (i == NUM_THREADS - 1) ? MAX_NUM : (i + 1) * chunkSize;
executorService.submit(new SumTask(start, end));
}
executorService.shutdown();
while (!executorService.isTerminated()) {
// 等待所有任务完成
}
System.out.println("Total sum: " + totalSum.get());
}
static class SumTask implements Runnable {
private final long start;
private final long end;
SumTask(long start, long end) {
this.start = start;
this.end = end;
}
@Override
public void run() {
long sum = 0;
for (long i = start; i <= end; i++) {
sum += i;
}
totalSum.addAndGet(sum);
}
}
}
Executors.newFixedThreadPool(NUM_THREADS)
创建一个固定大小的线程池。AtomicLong
类型的变量 totalSum
来保证多线程环境下的累加操作是线程安全的。Runnable
任务类 SumTask
,每个任务负责计算一部分数字的总和。NUM_THREADS
个部分,每个线程负责计算其中一部分的总和。executorService.shutdown()
和 executorService.isTerminated()
来等待所有任务完成。通过这种方式,可以有效地利用多线程提高计算效率,减少计算时间。
领取专属 10元无门槛券
手把手带您无忧上云