Java多线程编程是并发编程的核心部分,它允许多个任务同时运行。在Java中,可以通过继承Thread
类或实现Runnable
接口来创建线程。
创建线程的方式
class MyThread extends Thread {
public void run() {
System.out.println("Thread is running.");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start(); // 启动线程
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.println("Thread is running.");
}
}
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start(); // 启动线程
}
}
线程状态: 线程有五种主要状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。线程的生命周期由这些状态组成。
线程同步:
多线程环境下,多个线程可能会同时访问共享资源,这可能导致数据不一致。为了解决这个问题,Java提供了synchronized
关键字。
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
锁机制:
Java提供了更灵活的锁机制,如ReentrantLock
,它允许手动获取和释放锁。
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private final Lock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}
线程池: 使用线程池可以有效管理线程资源,避免频繁创建和销毁线程带来的开销。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
executor.submit(new Task(i));
}
executor.shutdown();
}
}
class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
public void run() {
System.out.println("Task " + taskId + " is running.");
}
}
Future与Callable:
Future
和Callable
可以用来执行异步任务并获取结果。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Callable<Integer> callable = () -> {
Thread.sleep(2000);
return 42;
};
FutureTask<Integer> futureTask = new FutureTask<>(callable);
new Thread(futureTask).start();
System.out.println("Result: " + futureTask.get());
}
}
Java多线程编程是一个复杂但强大的工具,能够显著提升程序性能。从基础的线程创建到高级的锁机制和线程池,掌握这些知识可以帮助开发者构建高效且稳定的并发应用程序。