当需要创建多个任务并行执行时,我们可以通过创建线程来实现。Java中创建线程有四种方式,分别是继承Thread
类、实现Runnable
接口、实现Callable
接口并使用FutureTask
包装器把Callable
装载成一个线程、使用Executor
框架创建线程池。下面依次介绍这四种方式:
继承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 thread = new MyThread();
thread.start();//启动线程
}
}
实现Runnable
接口
实现Runnable
接口并重写run()
方法同样可以创建线程,具体实现代码如下:
public class MyThread implements Runnable {
@Override
public void run() {
System.out.println("Thread is running...");
}
public static void main(String[] args) {
MyThread thread = new MyThread();
Thread t = new Thread(thread);
t.start();//启动线程
}
}
实现Callable
接口并使用FutureTask
包装器
Callable
接口提供了一种可以返回结果并抛出异常的线程方法,我们可以使用FutureTask
类来装载Callable
并创建线程,具体实现代码如下:
public class MyThread implements Callable<String> {
@Override
public String call() throws Exception {
return "Thread is running...";
}
public static void main(String[] args) throws Exception {
MyThread thread = new MyThread();
FutureTask<String> task = new FutureTask<>(thread);
Thread t = new Thread(task);
t.start();
System.out.println(task.get());
}
}
使用Executor
框架创建线程池
Executor
框架是Java线程池的核心,在java.util.concurrent
包中提供了各种线程池的实现方法。我们可以使用Executor
框架来创建线程池并提交任务,示例代码如下:
public class MyThread implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" is executing task...");
}
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);//创建线程池
for(int i=0;i<10;i++){
MyThread thread = new MyThread();//创建任务
executor.execute(thread);//提交任务
}
executor.shutdown();//关闭线程池
}
}
以上就是Java创建线程的四种方式的详细讲解。无论哪一种方式,都可以完成多线程并发任务的执行。在使用时,需要根据不同情况和需求选择恰当的方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 创建线程的四种方式 - Python技术站