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