Java实现异步的四种方式
Posted 黄 坤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现异步的四种方式相关的知识,希望对你有一定的参考价值。
1、开线程
/**
* 开线程
*/
public class ThreadTest {
public void test() {
new Thread(() -> {
//做处理
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
2、Future
/**
* Future
*/
public class FutureTest {
public void test() throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(1);
Future<String> submit = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
//做处理
Thread.sleep(1000);
return "hello";
}
});
//如果需要返回值的话,会阻塞主线程。
String s = submit.get();
}
}
3、CompletableFuture
/**
* CompletableFuture
*/
public class CompletableFutureTest {
public void test() {
ExecutorService executorService = Executors.newFixedThreadPool(1);
CompletableFuture<String> c = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
//做处理
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "hello";
}
}, executorService);
c.thenAccept(item -> System.out.println(item));
}
}
4、Async注解
/**
* Async注解:要在Spring中使用。
* 1、首先在启动类上开启注解@EnableAsync
* 2、然后需要异步操作的方法上加上@Async
*/
public class AsyncTest {
@Async
public void test() throws InterruptedException {
//做处理
Thread.sleep(1000);
}
/**
* 如果需要返回值的话,通过AsyncResult进行封装
*/
@Async
public Future<String> testReturn() throws InterruptedException {
//做处理
Thread.sleep(1000);
return new AsyncResult<>("hello");
}
}
以上是关于Java实现异步的四种方式的主要内容,如果未能解决你的问题,请参考以下文章