Java中的多线程编程
Java中的多线程可以通过继承Thread
类或实现Runnable
接口来实现,并且在实际开发中可以借助ExecutorService
等高层并发API进行线程管理。
1. 继承 Thread
类
这是最简单的创建线程的方法,但灵活性较低,因为Java不支持多继承。
class MyThread extends Thread {@Overridepublic void run() {for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " is running.");}}
}public class Main {public static void main(String[] args) {MyThread thread1 = new MyThread();thread1.start();MyThread thread2 = new MyThread();thread2.start();}
}
2. 实现 Runnable
接口
通过实现Runnable
接口,我们可以将任务与线程分离,增强了灵活性,适合复杂的多线程程序。
class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " is running.");}}
}public class Main {public static void main(String[] args) {Thread thread1 = new Thread(new MyRunnable());thread1.start();Thread thread2 = new Thread(new MyRunnable());thread2.start();}
}
3. 使用 ExecutorService
ExecutorService
提供了一个更灵活、便捷的多线程管理方式,避免直接管理线程,提高线程的可复用性。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Main {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(3);for (int i = 0; i < 5; i++) {executor.submit(() -> {System.out.println(Thread.currentThread().getName() + " is running.");});}executor.shutdown();}
}
Java的多线程注意点
- 同步控制:使用
synchronized
关键字或ReentrantLock
来确保线程安全。 - 线程池:避免直接创建大量线程,优先使用
ExecutorService
管理线程池。 - 并发工具:Java提供了
CountDownLatch
、CyclicBarrier
、Semaphore
等并发工具类来管理线程间的协调。