关于Java里面TimerTask如何设置返回的值问题

我的需求是获取一个令牌,拿着这个令牌做事,但是令牌有效期只有1分钟,所以我每隔1分钟之后就要刷新一下这个令牌,我在网上搜了一下,没看到我想要的答案,捣鼓了半天发现:

在run方法里面是可以调用别的方法的,因此我们只需要在定时执行的结果当做方法的入参,然后在方法里面去做值的返回,所以我们接受返回值的变量就用成员变量,这样就能把值带到成员变量里面,我们使用成员变量就相当于run方法返回的参数了,为了保证线程的可见性,这个成员变量还需要加上volatile,具体代码如下:

public class CodeGenerateUtil {
static volatile int sum=0;

//把令牌赋值给成员变量

private static void qiuhe(int num){
   sum=num;
}
public static void main(String[] args) {
  
  int num=0;

  Timer timer = new Timer();
  TimerTask task = new TimerTask() {
    @Override
    public void run() {
      int num=(int)(Math.random()*100);//随机数模拟得到的令牌
      System.out.println("获取令牌为"+num);
      qiuhe(num);//把令牌当入参传给方法
    }
  };
  System.out.println("第一次获取令牌啦!");
  // 在一分钟后执行任务,并且每隔一分钟重复执行
  timer.schedule(task, 1000, 1000);//为了方便看效果,设置1秒钟执行一次
  while (num <10){
    System.out.println("执行逻辑中————");
    System.out.println("打印逻辑中的令牌为->"+sum);
    try {
      Thread.sleep(500);//为了不让逻辑执行太快,方便看效果,睡半秒
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    num++;
  }
  timer.cancel();//逻辑执行完成了,不需要令牌了,取消定时任务
  System.out.println("任务结束啦!");
  System.out.println(sum);

}
}

打印效果:

第一次获取令牌啦!
执行逻辑中————
打印逻辑中的令牌为->0
执行逻辑中————
打印逻辑中的令牌为->0
获取令牌为63
执行逻辑中————
打印逻辑中的令牌为->63
执行逻辑中————
打印逻辑中的令牌为->63
获取令牌为73
执行逻辑中————
打印逻辑中的令牌为->73
执行逻辑中————
打印逻辑中的令牌为->73
获取令牌为5
执行逻辑中————
打印逻辑中的令牌为->5
执行逻辑中————
打印逻辑中的令牌为->5
获取令牌为7
执行逻辑中————
打印逻辑中的令牌为->7
执行逻辑中————
打印逻辑中的令牌为->7
获取令牌为47
任务结束啦!
47

大功告成!就问屌不屌


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值