细品 Java 中启动线程的正确和错误方式
原创Java中启动线程的正确与不正确方案
在Java程序中,多线程的使用是减成本时间程序性能的重要手段之一。然而,启动线程的方案如果不正确,或许会致使程序运行快速低下,甚至出现异常。本文将介绍Java中启动线程的正确和不正确方案。
不正确方案:直接调用run方法
直接调用线程对象的run方法并不会创建新的线程,而是在当前线程中直接执行run方法中的代码。这种方案实际上并没有启动线程。
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("我在运行");
}
}
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.run(); // 不正确的方案,不会创建新线程
}
}
正确方案:调用start方法
正确的方案是调用线程对象的start方法,这样Java虚拟机会创建一个新线程并执行run方法中的代码。
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("我在新线程中运行");
}
}
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start(); // 正确的方案,创建新线程并执行run方法
}
}
不正确方案:多次调用start方法
一个线程对象只能调用一次start方法。多次调用start方法会抛出IllegalThreadStateException异常。
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
myThread.start(); // 不正确的方案,会抛出IllegalThreadStateException异常
}
}
正确方案:实现Runnable接口
除了继承Thread类,还可以通过实现Runnable接口来创建线程。这种方案更加灵活,可以实现多个接口。
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("我在新线程中运行");
}
}
public class Test {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start(); // 正确的方案,创建新线程并执行run方法
}
}
总结:启动线程的正确方案是调用线程对象的start方法,而不是直接调用run方法。同时,需要注意避免多次调用start方法,以及灵活使用实现Runnable接口的方案创建线程。