在Java中,多线程的程序可以提高程序的运行效率,提高CPU的利用率,改善程序的响应性。在Java中,有三种方式可以用来创建线程:
- 继承Thread类
- 实现Runnable接口
- 使用Callable和Future
下面我们将逐一介绍这三种方式:
- 继承Thread类
在Java中,可以通过继承Thread类并覆盖run()方法来创建线程。然后通过调用start()方法来启动线程。
public class MyThread extends Thread {
public void run(){
System.out.println("MyThread running");
}
}
public class Main {
public static void main(String[] args){
MyThread myThread1 = new MyThread();
MyThread myThread2 = new MyThread();
myThread1.start();
myThread2.start();
}
}
- 实现Runnable接口
在Java中,还可以通过实现Runnable接口并实现run()方法来创建线程。然后通过new Thread(Runnable target)构造器创建线程,再调用start()方法来启动线程。
public class MyRunnable implements Runnable {
public void run(){
System.out.println("MyRunnable running");
}
}
public class Main {
public static void main(String[] args){
MyRunnable myRunnable1 = new MyRunnable();
MyRunnable myRunnable2 = new MyRunnable();
Thread thread1 = new Thread(myRunnable1);
Thread thread2 = new Thread(myRunnable2);
thread1.start();
thread2.start();
}
}
- 使用Callable和Future
在Java中,还可以通过实现Callable接口并实现call()方法来创建线程。然后通过FutureTask或Thread类来启动线程。
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class MyCallable implements Callable<String> {
public String call(){
return "MyCallable running";
}
}
public class Main {
public static void main(String[] args) throws Exception{
MyCallable myCallable = new MyCallable();
FutureTask<String> ft = new FutureTask<String>(myCallable);
Thread thread = new Thread(ft);
thread.start();
System.out.println(ft.get());
}
}
以上就是Java中创建线程的三种方式。继承Thread类和实现Runnable接口的方式创建的线程无法继承线程执行后的结果,而实现Callable接口的方式可以。
另外,实现Runnable和Callable接口的方式比继承Thread类的方式更好,因为Java不支持多重继承,但允许实现多个接口。而且,实现Runnable接口或Callable接口的线程可以被池化,复用,从而提高效率。