线程的创建与管理:Java的多重身份
1 线程的基本概念
线程是程序执行的最小单元,每个线程都拥有自己的调用栈和局部变量。在Java中,线程可以是程序的执行线,允许程序并发执行。
2 创建线程
在Java中,创建线程有两种主要方式:
继承Thread类:
通过创建一个新的类继承Thread
类,并重写其run
方法。
示例代码:
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread is running");
}
public static void main(String[] args) {
MyThread t = new MyThread();
t.start(); // 启动线程
}
}
实现Runnable接口:
创建一个类实现Runnable
接口,并实现run
方法。然后,可以将这个Runnable
实例传递给Thread
的构造函数。
示例代码:
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread is running");
}
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start(); // 启动线程
}
}
3 线程的生命周期
线程的生命周期包括以下几个状态:
-
新建(New):线程对象已被创建,但还没有调用
start
方法。 -
可运行(Runnable):线程对象已调用
start
方法,等待JVM调度执行。 -
阻塞(Blocked):线程在等待监视器锁,以进入同步方法或块。
-
等待(Waiting):线程等待另一个线程显式唤醒它。
-
计时等待(Timed Waiting):线程等待一定时间。
-
终止(Terminated):线程执行结束。
4 管理线程
Java提供了多种方法来管理线程:
-
启动线程:通过调用
start
方法启动线程。 -
休眠线程:使用
Thread.sleep
方法让当前线程暂停执行。 -
等待线程:调用
wait
方法让线程等待。 -
通知线程:调用
notify
或notifyAll
方法唤醒等待的线程。 -
结束线程:线程执行完毕后自然结束。
5 线程同步
由于多线程共享程序的内存空间,因此需要同步机制来避免数据不一致的问题。
-
同步方法:使用
synchronized
关键字同步方法。 -
同步块:使用
synchronized
关键字同步代码块。
示例代码:
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
6 线程安全
线程安全是指代码在多线程环境中能够正确执行。确保线程安全通常涉及:
-
不可变对象:创建不可变对象以确保线程安全。
-
局部变量:使用局部变量来避免共享状态。
-
线程局部存储:使用
ThreadLocal
类为每个线程提供独立的变量副本。
7 线程池
线程池是一种管理线程的机制,它避免了频繁创建和销毁线程的开销。
-
Executor框架:Java通过
java.util.concurrent
包提供了强大的线程池管理功能。
示例代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
int taskNo = i;
executor.execute(new Runnable() {
public void run() {
System.out.println("Task " + taskNo + " is running.");
}
});
}
executor.shutdown();
}
}
通过这一节的学习,你现在应该对Java中的线程创建与管理有了深入的理解。掌握线程的创建和管理是编写高效并发程序的关键,它允许程序以多重身份同时执行多个任务。下一节,我们将探讨同步与并发,这是Java的同步舞蹈,确保多线程程序的正确性和效率。