java多线程示例(java多线程实战指南)

Java 多线程示例

简介

多线程,是一种计算机应用程序设计范例,允许多个任务或线程同时执行。在 Java 中,线程可以通过继承 `Thread` 类或使用更高级别的 `Runnable` 接口来创建。

创建线程

1. 继承 `Thread` 类

```java public class MyThread extends Thread {@Overridepublic void run() {// 线程要执行的任务} } ```

2. 实现 `Runnable` 接口

```java public class MyRunnable implements Runnable {@Overridepublic void run() {// 线程要执行的任务} } ```

启动线程

一旦创建线程,就可以使用 `start()` 方法启动它:```java Thread myThread = new MyThread(); myThread.start();// 或者使用 Runnable 接口 Runnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); ```

线程同步

当多个线程同时访问共享资源时,可能会出现线程安全问题。为了解决此问题,Java 提供了各种同步机制,例如:

synchronized 块:

将代码块标记为同步块,从而一次只允许一个线程进入。```java public void doSomething() {synchronized (this) {// 同步代码块} } ```

锁:

显式获取锁并使用 `try-finally` 块将其释放。```java Object lock = new Object(); public void doSomething() {synchronized (lock) {// 同步代码块} } ```

原子类:

使用 `AtomicInteger` 等原子类,确保对变量的访问是原子性的。```java AtomicInteger counter = new AtomicInteger(0); public void incrementCounter() {counter.incrementAndGet(); } ```

线程池

线程池是一种管理线程的机制,可避免频繁创建和销毁线程的开销。```java ExecutorService executorService = Executors.newFixedThreadPool(5); executorService.submit(new MyRunnable()); executorService.shutdown(); ```

示例:多线程计算

以下示例展示了如何使用多线程并行计算数组元素的总和:```java public class SumArray {public static void main(String[] args) {int[] numbers = new int[1000000];for (int i = 0; i < numbers.length; i++) {numbers[i] = i;}// 创建线程池ExecutorService executorService = Executors.newFixedThreadPool(4);// 将数组分成 4 个部分并创建 4 个线程来计算每个部分的总和int[] sums = new int[4];for (int i = 0; i < 4; i++) {int start = i

numbers.length / 4;int end = (i + 1)

numbers.length / 4;Callable task = () -> {int sum = 0;for (int j = start; j < end; j++) {sum += numbers[j];}return sum;};Future future = executorService.submit(task);sums[i] = future.get();}// 计算数组元素的总和int total = 0;for (int sum : sums) {total += sum;}System.out.println("Total: " + total);executorService.shutdown();} } ```

结论

Java 多线程提供了一种强大的机制,可以在应用程序中实现并行性和并发性。通过仔细管理线程同步,可以提高应用程序的性能和响应能力。线程池进一步减少了线程管理的开销,优化了多线程应用程序的效率。

标签列表