TImer在java中无法正常工作

时间:2014-03-10 02:17:10

标签: java multithreading timer

这是我的Timer日程安排程序

   timer.schedule(new SuperOne(),new Date(),10);

SuperOne方法的run类中我调用synchronized方法通过使用上面的代码该任务只运行一次。

我的要求是它必须每分钟(60秒)调用synchronized方法。 这里的计时器调度程序没有按照我的预期运行...是因为我正在运行synchronized方法吗?

请帮助我在这

* 编辑:它第一次工作(调用一次)而不是在10毫秒后调用*

这是必须运行的代码

    private boolean proxyEnabled=false;
public synchronized void statusChecker()
{
    StopWatch sWatch = new StopWatch();

    ResourceBundle resource = ResourceBundle.getBundle("resources.application");
    System.out.println(resource.getString("url"));

    try {
    URL url = new URL("https://www.google.com/");
    HttpURLConnection urlConnection;


    if(proxyEnabled) {
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxYhost", portNumber));
        sWatch.start();
        urlConnection =(HttpURLConnection) url.openConnection(proxy);
        System.out.println(urlConnection);
    } else {
        urlConnection =(HttpURLConnection)url.openConnection();
        sWatch.start();
    }

     System.out.println(urlConnection.getResponseCode());
     in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

    if(in!=null)
    {
        System.out.println("The resopose TIme is  -- >"+ sWatch.toString());
    }else
    {
        System.exit(0);
    }



    }catch(Exception e)
    {
        e.printStackTrace();
        System.exit(0);
    }finally
    {
        sWatch.stop();
    }
}

扩展TimerTask

的类
   public class SuperOne extends TimerTask{



boolean flag = false;

@Override

public synchronized void run()  {
    // TODO Auto-generated method stub
    try {

        System.out.println("*** * ** Thread started ** ** *** ");
            Thread th = Thread.currentThread();
            System.out.println(th.isAlive());
        CheckServer cs  = new CheckServer();
        cs.statusChecker();



    }
    catch(Exception e)
    {
        System.out.println("Exception in Run IterFace "+e);
        e.printStackTrace();
    }


}
 }

1 个答案:

答案 0 :(得分:1)

你已经run synchronized,这意味着每次只能有一个线程访问该功能(这实际上一次只能激活一个任务)。我不相信这是你打算做的。我想你打算做的是在执行run期间调用synchronized调用,这样只有一个正在运行的任务可以一次调用它来确保一致性。

很多人都对synchronized所做的事情感到懊恼,因为它并没有像很多人所期望的那样(尽管如果你考虑常见的用例,它的名字就是这样做的)为了它)。有关更多信息,请参阅Java synchronized tutorial