1. 创建线程:
在 Java 中,有两种主要的方式来创建线程:
- 继承 Thread 类:
class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
// 创建并启动线程
MyThread myThread = new MyThread();
myThread.start();
- 实现 Runnable 接口:
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
// 创建线程并传入 Runnable 对象
Thread myThread = new Thread(new MyRunnable());
myThread.start();
2. 线程生命周期:
Java 线程有以下状态:
- 新建(New):
- 线程被创建但还未启动。
- 就绪(Runnable):
- 线程可以运行,但未被调度执行。
- 运行(Running):
- 线程正在执行任务。
- 阻塞(Blocked):
- 线程被阻塞等待某个事件的发生。
- 等待(Waiting):
- 线程等待其他线程的通知。
- 超时等待(Timed Waiting):
- 线程等待一定时间后自动恢复。
- 终止(Terminated):
- 线程执行完成或出现异常而终止。
3. 线程同步:
在多线程环境中,可能会涉及到共享资源的访问。为了确保多个线程能够正确访问共享资源,需要使用同步机制,如 synchronized 关键字。
class SharedResource {
private int counter = 0;
public synchronized void increment() {
counter++;
}
}
4. 线程通信:
线程通信是多个线程之间协作的一种方式,通过 wait()、notify() 和 notifyAll() 方法实现。
class SharedResource {
private boolean flag = false;
public synchronized void produce() {
while (flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 生产操作
flag = true;
notify();
}
public synchronized void consume() {
while (!flag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 消费操作
flag = false;
notify();
}
}
5. 线程池:
线程池是一种管理和重用线程的机制,可以有效地控制并发线程的数量。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务给线程池
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
// 线程执行的任务
System.out.println(Thread.currentThread().getName() + " is executing task.");
});
}
// 关闭线程池
executorService.shutdown();
}
}
6. 线程安全性:
确保线程安全性是多线程编程的关键。除了使用同步机制外,还可以使用 volatile 关键字、Atomic 类等方式来确保线程安全。
7. 线程异常处理:
在多线程环境中,异常的处理方式需要特别注意。可以通过 Thread.UncaughtExceptionHandler 接口来处理未捕获的异常。
Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> {
System.out.println("Uncaught exception in thread: " + thread.getName());
throwable.printStackTrace();
});
Thread thread = new Thread(() -> {
throw new RuntimeException("Intentional exception");
});
thread.start();
以上是一个简单的 Java 线程教程,涵盖了基本的概念和用法。多线程编程是一个复杂的主题,有很多进阶的概念和技术,如线程池、并发集合、原子操作等。
转载请注明出处:http://www.zyzy.cn/article/detail/460/Java