Java定时缓存数据

来源:互联网 发布:视频监控管理平台软件 编辑:程序博客网 时间:2024/05/21 12:47
package com.zwb.test.timeCache;

import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;

public class Test
{
    /**
     * key:phone_num手机号,value:message手机短信验证码
     */
    private HashMap<String, String> messageMap = new HashMap<String, String>();  
    
    /**
     * 定时缓存
     * @param phoneNum
     * @param message
     */
    private void timerCache(String phoneNum, String message)
    {
        messageMap.put(phoneNum, message);
        Timer timer = new Timer();
        //60秒后执行任务TimerDeleteTask
        timer.schedule(new TimerDeleteTask(phoneNum, timer), 60000);
    }
    
    /**
     * 定义一个任务,60秒后删除map中对应的key-value值
     * @author zhengwb
     *
     */
    class TimerDeleteTask extends TimerTask
    {
        private String phoneNum;
        
        private Timer timer;
        
        public TimerDeleteTask(String phoneNum, Timer timer)
        {
            this.phoneNum = phoneNum;
            this.timer = timer;
        }

        @Override
        public void run()
        {
            messageMap.remove(phoneNum);
            timer.cancel();
            if (null != timer)
            {
                timer = null;
            }
        }
        
    }

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Test test = new Test();
        String phoneNum = "13111111111";
        String message = "123456";
        test.timerCache(phoneNum, message);
        System.out.println(test.messageMap.get(phoneNum));
        try
        {
            //延时30秒
            Thread.currentThread().sleep(30000);
            System.out.println("30秒后...");
            if (test.messageMap.containsKey(phoneNum))
            {
                System.out.println(test.messageMap.get(phoneNum));
            }
            //延时40秒
            Thread.currentThread().sleep(40000);
            System.out.println("40秒后...");
            if (!test.messageMap.containsKey(phoneNum))
            {
                System.out.println("data delete success");
            }
            
        }
        catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}


执行结果:

123456
30秒后...
123456
40秒后...
data delete success


原创粉丝点击