Java异步调用是一种在不阻塞当前线程的情况下执行耗时操作的技术,它可以让程序在等待耗时操作完成的同时,继续执行其他任务,Java中有多种实现异步调用的方法,本文将介绍其中的四种方法。
1、使用Thread类实现异步调用
Thread类是Java中用于创建线程的类,通过继承Thread类并重写run()方法,可以实现异步调用,以下是一个简单的示例:
class MyThread extends Thread { @Override public void run() { // 耗时操作 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("异步任务执行完毕"); } } public class Main { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); // 启动线程 System.out.println("主线程继续执行"); } }
2、使用Runnable接口实现异步调用
除了继承Thread类,还可以实现Runnable接口来实现异步调用,以下是一个简单的示例:
class MyRunnable implements Runnable { @Override public void run() { // 耗时操作 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("异步任务执行完毕"); } } public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); // 启动线程 System.out.println("主线程继续执行"); } }
3、使用CompletableFuture实现异步调用
Java 8引入了CompletableFuture类,它是一个实现了Future接口的类,可以用于实现异步调用,以下是一个简单的示例:
import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { try { TimeUnit.SECONDS.sleep(1); // 耗时操作 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("异步任务执行完毕"); }); future.thenRun(() -> System.out.println("主线程继续执行")); // 当异步任务完成后,执行主线程的任务 } }
4、使用ExecutorService实现异步调用
ExecutorService是一个管理线程的接口,可以通过它来创建线程池,实现异步调用,以下是一个简单的示例:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.Future; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeLimitExceededException; import java.util.List; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import java.util.concurrent.*; import java.util.*; // for the Future example below only, otherwise remove this import statement at the top of your file! public class Main { public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException, TimeLimitExceededException { ExecutorService executor = Executors.newFixedThreadPool(2); Future<Integer> future = executor.submit(new Callable<Integer>() { @Override public Integer call() throws Exception { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } return 123; } }); // get the result of the future object System.out.println(\"Result: \" + future.get()); // cancel the task if it's not done yet future.cancel(true); // shut down the executor service after all tasks are completed executor.shutdown(); } }*/ JAVA异步调用的4种实现方法:使用Thread类、使用Runnable接口、使用CompletableFuture和使用ExecutorService,这些方法都可以实现在不阻塞当前线程的情况下执行耗时操作,让程序在等待耗时操作完成的同时,继续执行其他任务,下面我们分别详细介绍这四种方法。 一、使用Thread类实现异步调用:通过继承Thread类并重写run()方法,可以实现异步调用,以下是一个简单的示例: class MyThread extends Thread { public void run() { try { TimeUnit
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/154873.html