java高级开发

ThingsBoard二次开发之源码分析1- 基础知识

2022-05-23  本文已影响0人  老鼠AI大米_Java全栈

预备知识

JDK1.8

注解

@PostConstruct

@postConstruct 注解并非为spring提供, 该注解用来修饰非静态void()方法,该注解的执行时机为在对象加载完依赖注入后执行,即Constructor > @Autowired > @postConstruct;

@EventListener

由spring提供,spring为我们提供了事件的监听与实现,内部的实现原理是观察者设计模式,实现了系统解耦,时间发布者不需要考虑谁在监听,发布者只关心自己消息的发布;

ApplicationReadyEvent

应用已经就绪处理请求,将会发布该事件;(An ApplicationReadyEvent is sent after any application and command-line runners have been called. It indicates that the application is ready to service requests.)

@Conditional及包括其子注解

spring提供,对满足条件进行注入;

@Builder

lombok插件提供,目的是简化构造者模式的代码。Builder Pattern可轻松创建复杂对象;

Protobuf

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。相比JSON,XML占用内存小,解析速度更快。在使用过程中,首先创建xx.proto文件,通过protobuf-maven-plugin创建相应的类。

Guava

Guava 是一组来自谷歌的核心Java库,其中包括新的集合类型、不可变集合、一个图库,以及用于并发、I/O、散列、缓存、原语、字符串等的实用工具。

  1. 使用MoreExecutors创建线程池
ListeningExecutorService  executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
  1. 提交任务
 final ListenableFuture<Integer> listenableFuture = executorService.submit(new Callable<Integer>() {
            public Integer call() throws Exception {
                System.out.println("call execute..");
                TimeUnit.SECONDS.sleep(3);
                return 7;
            }
        });
  1. 添加监听任务执行状态①
listenableFuture.addListener(()->{
            try {
                System.out.println(listenableFuture.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        },executorService);
  1. 添加监听任务执行状态②
  Futures.addCallback(listenableFuture, new FutureCallback<Integer>() {
            @Override
            public void onSuccess(@Nullable Integer integer) {
                        //返回future的执行结果
            }
            @Override
            public void onFailure(Throwable throwable) {

            }
        }, executorService);
      ListenableFuture<String> future = executorService.submit(() -> "hello, future");
      ListenableFuture<Integer> future2 = Futures.transform(future2, String::length, executorService);
     //future2返回的是’hello, future‘的长度
SettableFuture<Integer> settableFuture = SettableFuture.create();
ListenableFuture<Integer> future11 = executorService.submit(() -> {
    int sum = 5 + 6;
    settableFuture.set(sum);
    return sum;
});
// get设置超时时间 
System.out.println(settableFuture.get(2, TimeUnit.SECONDS));
上一篇 下一篇

猜你喜欢

热点阅读