下面是总结Java中线程的状态及多线程的实现方式的完整攻略。
一、线程的状态
Java中线程存在着不同的状态,以下是线程的5种基本状态,它们的枚举常量定义在Thread.State中:
- NEW:一个尚未启动的线程处于这个状态,当调用线程对象start()方法后,线程就会变成可运行状态。
- RUNNABLE:这种状态下的线程可能正在运行,也可能正在等待CPU时间片(占用中)。
- BLOCKED:一个正在阻塞等待监视器锁的线程处于这个状态。(比如一个线程在执行synchronized方法或代码块时,被另一个线程调用interrupt()方法,该线程就会处于阻塞状态,直到获得锁或等待超时)
- WAITING:一个正在等待另一个线程来执行特定操作的线程处于这个状态。(比如一个线程调用了wait()方法,会使线程处于等待状态)
- TIMED_WAITING:一个限定时间等待其他线程执行操作的线程的状态。(比如一个线程调用了Thread.sleep(long millis)方法或wait(long millis)方法,会使线程处于限定时间等待状态)
二、多线程的实现方式
多线程的实现方式有两种:继承Thread类和实现Runnable接口。
1. 继承Thread类
从Thread类继承创建线程是很简单的。只需要扩展Thread类,然后重写它的run()方法,最后创建新的Thread对象并调动它的start()方法。如下示例代码:
public class MyThread extends Thread {
@Override
public void run() {
// 这里编写线程要执行的任务
}
}
// 在主线程中创建新的线程并启动
public static void main(String[] args) {
MyThread myThread = new MyThread(); // 创建新线程对象
myThread.start(); // 启动线程
}
2. 实现Runnable接口
实现Runnable接口同样很简单。只需要实现Runnable接口,然后重写它的run()方法,并通过Thread类来创建新的线程对象并启动。如下示例代码:
public class MyRunnable implements Runnable {
@Override
public void run() {
// 这里编写线程要执行的任务
}
}
// 在主线程中创建新的线程并启动
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable(); // 创建新线程对象
Thread myThread = new Thread(myRunnable); // 创建新线程对象
myThread.start(); // 启动线程
}
三、示例说明
假设我们需要一个可以分别输出“奇数”和“偶数”的程序,让其中的两个线程分别输出。
1. 继承Thread类
public class PrintNumThread extends Thread {
// 控制要输出的数,初始值为1
private static volatile int num = 1;
// 控制循环次数的变量
private static final int maxCount = 10;
// 控制输出奇偶数的变量,true表示输出奇数,false表示输出偶数
private boolean isOdd;
public PrintNumThread(boolean isOdd) {
this.isOdd = isOdd;
}
@Override
public void run() {
while (num <= maxCount) {
if ((num % 2 == 1) == isOdd) {
System.out.println(Thread.currentThread().getName() + " :" + num);
num++;
}
}
}
}
public static void main(String[] args) {
// 创建两个线程对象
PrintNumThread oddThread = new PrintNumThread(true);
PrintNumThread evenThread = new PrintNumThread(false);
// 启动两个线程
oddThread.start();
evenThread.start();
}
2. 实现Runnable接口
public class PrintNumRunnable implements Runnable {
// 控制要输出的数,初始值为1
private static volatile int num = 1;
// 控制循环次数的变量
private static final int maxCount = 10;
// 控制输出奇偶数的变量,true表示输出奇数,false表示输出偶数
private boolean isOdd;
public PrintNumRunnable(boolean isOdd) {
this.isOdd = isOdd;
}
@Override
public void run() {
while (num <= maxCount) {
if ((num % 2 == 1) == isOdd) {
System.out.println(Thread.currentThread().getName() + " :" + num);
num++;
}
}
}
}
public static void main(String[] args) {
// 创建两个Runnable接口对象
PrintNumRunnable oddRunnable = new PrintNumRunnable(true);
PrintNumRunnable evenRunnable = new PrintNumRunnable(false);
// 创建两个线程对象
Thread oddThread = new Thread(oddRunnable);
Thread evenThread = new Thread(evenRunnable);
// 启动两个线程
oddThread.start();
evenThread.start();
}
以上就是Java中线程状态及多线程实现方式的详细讲解及示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:总结Java中线程的状态及多线程的实现方式 - Python技术站