# 方法上加注解 @Async @PostConstruct

但是依旧会卡主主线程,所有另辟蹊径

第一种

在启动类上加注解

@EnableAsync

新建一个类

实现 ApplicationRunner 并重写 run 因为我们是死循环,所以在 run 方法上额外加一个 @Async 注解即可 例如如下

package com.ruoyi.project.init;
import com.ruoyi.common.utils.MyUtils;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import javax.annotation.PostConstruct;
@Configuration
public class HandleTransInit implements ApplicationRunner {
     * 处理转账数据
     * @param args
    @Override
    @Async
    public void run(ApplicationArguments args) {
        while (true) {
            System.out.println("执行");
            MyUtils.sleep(1000);
}

第二种

新建一个类

在类上加注解 @Configuration 新建方法,在方法上加注解 @PostConstruct 例如代码如下

package com.ruoyi.project.init;
import com.ruoyi.common.utils.MyUtils;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Configuration
public class HandleTransInit11 {
     * 处理转账数据
    @PostConstruct
    public void run() {
        //因为我是死循环这个简单的需求,所以线程池容量我就填写1了,如果你有其他需求,可以填大点,然后 scheduleAtFixedRate 方法复制多一点就行了
        ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
        // 下面用的是scheduleAtFixedRate,还有一种是scheduleWithFixedDelay
        // 区别
        // scheduleAtFixedRate:如果上一个任务的执行时间大于周期时间(period参数),任务结束后,下一个任务马上执行
        // scheduleWithFixedDelay:如果上个任务的执行时间大于周期时间(period参数),任务结束后也会等待周期相应的时间才执行下一个任务
        // 不管是scheduleAtFixedRate还是scheduleWithFixedDelay,他们都会等待上一个任务运行结束再进行下一个任务,而不是并发执行
        scheduledThreadPoolExecutor.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                //System.out.println(Thread.currentThread().getName());
                System.out.println("开始" + LocalDateTime.now());
                MyUtils.sleep(500);
                System.out.println("完成" + LocalDateTime.now());
        }, 1, 2, TimeUnit.SECONDS);
        // 说一下3个参数的含义,
        // 第一个参数,要执行的run方法,
        // 第二个参数,initialDelay,首次执行等待多久后开始执行,就是容器启动后等待多久后才执行
        // 第三个参数,period,周期,首次执行完后,以后每次执行间隔多久执行
        // 这里写的period参数为2代表每2秒执行一次
        // 如果run方法里的执行时间超过了2秒,那么run方法里执行完后,会立马执行,而不会再次等待2秒
        // 如果run方法里的执行时间没有超过2秒,例如用时500毫秒,那么将会延迟1.5秒后继续执行run方法(周期 - run方法耗时 = 1.5秒)
                            
java integer == javainteger判断相等

要在Java中检查两个数字是否相等,我们可以使用Equals()方法以及==运算符。首先,让我们设置整数。Integer val1 = new Integer(5); Integer val2 = new Integer(5);现在,要检查它们是否相等,让我们使用==运算符。(val1 == val2)现在让我们看完整的例子。示例 public class Demo { publi

android 接口回调和函数 什么叫接口回调

搞过Android的同志们,尤其是初学者,对于接口回调应该不陌生的,至少应该见过下面的代码://给按钮设置点击事件 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {