java编写异步处理方法提升系统性能

系统性能优化时我们会对一些耗时操作进行异步处理,最常见的就是http请求,但java中怎么编写异步操作呢,下面我们就来介绍几种方法。

一、使用接口

1.1 编写接口,用于接收异步线程回调的数据

public interface HttpCallBackListener {
    // 成功回调函数
    void onFinish(String response);

    // 失败回调函数
    void onError(Exception e);
}

1.2 发送http请求

public class HttpUtil {

    public static void sendHttpRequest(final String address, final HttpCallBackListener listener) {
        new Thread(new Runnable() {
            public void run() {
                HttpUrlConnection connection = null;
                try {
                    // 这里发送http请求
                    ...
                    if(null != listener) {
                        // 回调函数接收响应数据
                        listener.onFinish(response.toString());
                    }
                } catch(Exception e) {
                    if(null != listener) {
                        // 回调函数接收异常数据
                        listener.onError(e);
                    }
                } finally {
                    if(null != connection) {
                        // 关闭连接
                        connection.disconnection();
                    }
                }
            }
        }).start();
    }
}

1.3 调用http请求方法,异步接收数据

final String address = "http://xxx.com";
HttpUtil.sendHttpRequest(address, new HttpCallBackListener() {
    @Override
    public void onFinish(String response) {
        // 这里处理接收到的数据
    }

    @Override
    public void onError(Exception e) {
        // 这里处理异常情况
    }
});

二、使用ExecutorService

2.1 定义接口回调函数

public interface CallBack {
    void process();
}

2.2 定义线程执行类,开启子线程异步处理

public class ThreadExecutor { 

    private static ExecutorService service = Executors.newCachedThreadPool();

    public static void excute(final CallBack callBack) {
        service.execute(new Runnable() {  
            @Override
            public void run() {
                try {
                    // 执行回调函数处理业务逻辑
                    callBack.process();
                } catch(Exception e) {
                    // 处理异常情况
                }
            }
        });
    }
}

2.3 调用异步方法

final String address = "http://xxx.com";
final String data = "xxx";
// 调用异步处理发送http请求
ThreadExecutor.excute(new CallBack() {
    @Override
    public void process() {
        // 该方法是同步方法
        String response = HttpUtil.sendRequest(address, data); 
        // 这里处理业务逻辑,这块的处理将在子线程内进行,属于异步操作,
        // 原先同步耗时的操作都可以不需要修改的放在这里进行优化异步处理
    }
});

三、spring boot在启动的时候可以注解支持异步函数

3.1 注解支持异步函数

@SpringBootApplication
@EnableAsync             // 启动异步执行函数
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

3.2 编写异步函数

@Component // spring 管理的组件
public class MyAsync {

    private static final Logger LOG = LoggerFactory.getLogger(MyAsync.class);

    /**
     * 该函数属性异步函数
     * @param name
     */
    @Async
    public void testAsync(String name) {
        try {
            LOG.info("Name is " + name);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值