黑马程序员---交通灯案例的定时器

本文通过实例探讨了Java中的定时器技术及其在模拟倒计时中的应用,同时涉及内部类的使用与访问外部类属性的问题。通过将方法的局部变量设置为静态变量解决了访问问题,并演示了如何使倒计时程序仅执行一次。
 

 ---------------------- android培训java培训、期待与您交流! ----------------------

 

看完交通灯的面试案例,对其中的定时器技术很感兴趣,就自己写了一个,然后试了试其中的方法作用

练习定时器技术的同时,也顺便巩固了一下内部类的应用,下面是自己做的实验:

第一个定时器,模拟倒计时

 

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


public class MyTimer {
 public static void main(String[] args) {
  
  ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);
  timer.scheduleAtFixedRate(new Runnable(){
   public void run() {
    System.out.println("倒计时开始:");
    for(int i=10;i>0;i--){
    System.out.println(+i);
    }
    
    System.out.println("发射!");
   }
  },
  1,
  1,
  TimeUnit.SECONDS);
 }
}

倒计时开始:
10
9
8
7
6
5
4
3
2
1
发射!
倒计时开始:
10
9
8
7
6
5
4
3
2
1
发射!

有一点小问题是:倒计时结束后,这个定时器还会继续执行,怎样让这个倒计时程序只执行一次呢?

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MyTimer1 {
 static int account=10;
 public static void main(String[] args) {
  
  ExecutorService timer=Executors.newFixedThreadPool(1);
  timer.submit(new Runnable(){
   public void run() {
    System.out.println("倒计时开始:");
    for(;account>0;account--){
    System.out.println(account);
    }
    System.out.println("发射!");
   }
  });
  timer.shutdownNow();
  
 }

}

倒计时开始:
10
9
8
7
6
5
4
3
2
1
发射!
试了试按照老师的代码实现,怎么也过不去,然后换成上面的样子才好

但是实验的过程中,也碰到了内部类访问外部类属性、访问方法局部变量的问题,最后的解决方法是把方法的局部变量设置为static

才解决

 

---------------------- android培训 java培训 、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值