Spring Boot 性能太差?试试这几招!

今天这篇文章介绍七种常见的Spring Boot 性能优化方向

1. 异步执行

实现方式二种:

  • 使用异步注解 @Aysnc、启动类:添加 @EnableAsync 注解

  • JDK 8 本身有一个非常好用的 Future 类——CompletableFuture

@AllArgsConstructor  
public class AskThread implements Runnable{  
    private CompletableFuture<Integer> re = null;  
  
    public void run() {  
        int myRe = 0;  
        try {  
            myRe = re.get() * re.get();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        System.out.println(myRe);  
    }  
  
    public static void main(String[] args) throws InterruptedException {  
        final CompletableFuture<Integer> future = new CompletableFuture<>();  
        new Thread(new AskThread(future)).start();  
        //模拟长时间的计算过程  
        Thread.sleep(1000);  
        //告知完成结果  
        future.complete(60);  
    }  
}  

在该示例中,启动一个线程,此时 AskThread 对象还没有拿到它需要的数据,执行到 myRe = re.get() * re.get() 会阻塞。

我们用休眠 1 秒来模拟一个长时间的计算过程,并将计算结果告诉 future 执行结果,AskThread 线程将会继续执行。

public class Calc {  
    public static Integer calc(Integer para) {  
        try {  
            //模拟一个长时间的执行  
            Thread.sleep(1000);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
        return para * para;  
    }  
  
    public static void main(String[] args) throws ExecutionException, InterruptedException {  
        final CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> calc(50))  
                .thenApply((i) -> Integer.toString(i))  
                .thenApply((str) -> "\"" + str + "\"")  
                .thenAccept(System.out::println);  
        future.get();  
    }  
}  

CompletableFuture.supplyAsync 方法构造一个 CompletableFuture 实例,在 supplyAsync() 方法中,它会在一个新线程中,执行传入的参数。

在这里它会执行 calc() 方法,这个方法可能是比较慢的,但这并不影响 CompletableFuture 实例的构造速度,supplyAsync() 会立即返回。

而返回的 CompletableFuture 实例就可以作为这次调用的契约,在将来任何场合,用于获得最终的计算结果。

supplyAsync 用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值