我想用Timer和TimerTask做一个定时器,请问可以传参吗package org.tiling.scheduling.examples;
import java.util.Timer;
import java.util.TimerTask;
public class EggTimer {
    private final Timer timer = new Timer();
    private final int minutes;
    public EggTimer(int minutes) {
        this.minutes = minutes;
    }
    public void start() {
        timer.schedule(new TimerTask() {
            public void run() {
                playSound();
                timer.cancel();
            }
            private void playSound() {
                System.out.println("Your egg is ready!");//想把参数传到这来
                // Start a new thread to play a sound...
            }
        }, minutes * 60 * 1000);
    }
    public static void main(String[] args) {
        EggTimer eggTimer = new EggTimer(2);
        eggTimer.start();
    }
}我能把页面的参数传到playSound()方法中吗?

解决方案 »

  1.   

    package com.im.controler;import java.text.ParseException;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;import com.im.context.IMContext;
    import com.im.dto.Visitor;public class VisitorTimeOutControler {
    private static Timer timer=new Timer();
    private static long delay;
    private static TimerTask timerTask =new TimerTask() {
    @Override
    public void run() {
    execute();
    }
    };

    /**
     * 超时检查
     */
    private static void execute() {
    for (String key : IMContext.getVisitorKeys()) {
    Visitor visitor = IMContext.getVisitor(key);
    Date endDate = null;
    try {
    endDate = IMContext.dateFormat.parse(visitor.getEndTime() == null
    || visitor.getEndTime().equals("") ? visitor
    .getStartTime() : visitor.getEndTime());
    } catch (ParseException e) {
    e.printStackTrace();
    } Calendar calendar = Calendar.getInstance();
    calendar.setTime(endDate);
    long offset = System.currentTimeMillis()
    - calendar.getTimeInMillis();
    if (offset > 0.5 * 60 * 1000) {
    // 等待超时
    System.out.println("移除过期对话!!--->:" + visitor.getVid());
    IMContext.removeVisitor(visitor.getIp());
    continue;
    } else {
    System.out.println(offset);
    }
    }
    }

    /**
     * 启动超时检查
     * @param delay
     */
    public static void start(long delay){
    VisitorTimeOutControler.setDelay(delay);
    timer.schedule(timerTask, VisitorTimeOutControler.delay);
    System.out.println("Visitor超时检查启动...");
    } /**
     * 返回延期时间
     * @return long
     */
    public static long getDelay() {
    return VisitorTimeOutControler.delay;
    } /**
     * 设置延期时间
     * @param delay
     */
    public static void setDelay(long delay) {
    VisitorTimeOutControler.delay = delay;
    }
    }
      

  2.   


      public void start(final String str) {
            timer.schedule(new TimerTask() {
                public void run() {
                    playSound();
                    timer.cancel();
                }
                private void playSound() {
                    System.out.println(str);//想把参数传到这来
                    // Start a new thread to play a sound...
                }
            }, minutes* 1000);
        }
        public static void main(String[] args) {
            EggTimer eggTimer = new EggTimer(2);
            eggTimer.start("123");
        }
      

  3.   

    不太懂你写的,我要的效果是这样的package sdcss.client.dyxxwh;
    import java.util.Timer;
    import java.util.TimerTask;import dfsf.core.DataSet;
    public class EggTimer {
        private final Timer timer = new Timer();
        private final int minutes;
        public EggTimer(int minutes) {
            this.minutes = minutes;
        }
        public void start() {
            timer.schedule(new TimerTask() {
                public void run() {
                    playSound();
                    timer.cancel();
                }
                
                private void playSound() {
                 String sql = "";//想把sql这个参数传过来,在调用start方法的时候
                 DataSet ds = new DataSet();
                 try {
    ds.getSqlResult(sql);
    } catch (Exception e) {
    e.printStackTrace();
    }
                }
            }, minutes * 60 * 1000);
        }
        public static void main(String[] args) {
            EggTimer eggTimer = new EggTimer(2);
            eggTimer.start();
        }
    }
      

  4.   

    是不是多个参数也可以?只要是final类型的就可以了?我这个方法能处理并发吗?
      

  5.   

    LS的是什么东西,用spring?我们公司不用spring,所以只能用java自带的。