• Spring中的@Lazy注解简析_阻塞队列被异步消费怎么保持顺序呢?_如何优雅的停止一个线程


    @Lazy 的属性

    Spring IoC (ApplicationContext) 容器一般都会在启动的时候实例化所有单实例 bean 。如果我们想要
    Spring 在启动的时候延迟加载 bean,即在调用某个 bean 的时候再去初始化,那么就可以使用 @Lazy 注解。

    value 取值有 true 和 false 两个 默认值为 true

    true 表示使用 延迟加载, false 表示不使用,false 纯属多余,如果不使用,不标注该注解就可以了。
    Person 类

    public class Person {
    
        private String name;
        private Integer age;
        public Person() {
    
        }
    
        public Person(String name, Integer age) {
            System.out.println(" 对象被创建了.............");
            this.name = name;
            this.age = age;
        }
      // 省略 getter setter 和 toString 方法
    }
    

    配置类 不标注 @Lazy 注解

    public class LazyConfig {
        @Bean
        public Person person() {
            return new Person("李四", 55);
        }
    }
    

    测试

        @Test
        public void test5() {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(LazyConfig.class);
        }
    

    不获取 bean , 看控制台是否会打印。如果有打印,代表调用了构造器。

    结果

    img

    在配置类打上 @Lazy 注解

    public class LazyConfig {
        @Lazy
        @Bean
        public Person person() {
         return new Person("李四", 55);
        }
    }
    

    再来看输出结果


    没有打印语句,对象没有调用构造器,那么方法也就没有被创建。
    @Lazy(value = false) 或者 @Lazy(false) 那么对象会在初始化的时候被创建


    @Lazy注解注解的作用主要是减少springIOC容器启动的加载时间

    当出现循环依赖时,也可以添加@Lazy

    阻塞队列被异步消费怎么保持顺序呢?

    堵塞队列是一个符号FIFO的队列,使用condition条件维护了两个等待队列,如下图

     任务队列满了,生产者会被按照先进先出的顺序放在链表里面,消费者也是如此。

    对于堵塞队列的消费过程有两种情况,第一种是堵塞队列里面已经包含了很多任务,这个时候启动消费者线程去消费的时候,

    他的有序性是通过加锁来实现的,每个消费者线程去堵塞队列里面获取任务的时候,必须先要去获得排它锁,如果多个消费者如果堵塞

    队列里面没有任务而堵塞这个时候线程是按照FIFO的一个顺序存储到一个condition条件等待队列里面,按照FIFO的顺序被唤醒。

    停止线程

    使用stop会产生的问题

     

     

  • 相关阅读:
    java-HTML&javaSkcript&CSS&jQuery&ajax
    HTML&javaSkcript&CSS&jQuery&ajax-XSS
    XSS-HTML&javaSkcript&CSS&jQuery&ajax-CSS
    XSS-HTML&javaSkcript&CSS&jQuery&ajax
    HTML&javaSkcript&CSS&jQuery&ajax-Css
    论坛IP地址追踪&路由器密码嗅探
    java ArrayList
    WireShark Flow capture analysis
    Software tips
    301. Remove Invalid Parentheses
  • 原文地址:https://www.cnblogs.com/henuliulei/p/16532453.html
Copyright © 2020-2023  润新知