1.new Thread(new Test(60 * 1000)).start();
2.Thread.sleep(1000);
3.new Thread(new Test(30 * 1000)).start();
4.Thread.sleep(1000);
5.new Thread(new Test(20 * 1000)).start();
要求:
1.预想1执行60s后输出60000 end。
3.一秒后,重新预想30秒后输出30000 end。但此时1立马结束等待并执行60000 end。
5.一秒后,再重新预想20秒后输出20000 end。但此时3立马结束等待并执行30000 end。
等待20秒后输出,20000 end。
public Test implements Runnable
{
....
public Test(long time)
{
....
}@Override
public void run()
{
   //TODO 这里等待某段时间
   
   dosomething();
}
private void dosomething()
{
  System。out.println(time + “ end”);
}
}如果有难度或者线程不好控制,请给出该逻辑的处理的等价程序。

解决方案 »

  1.   

    没明白楼主意思。。先后60S后,再又20S后,再又20S。。请问到底先那个再那个啊。这20S后,是不是包括在这60S以内啊,还是过了这60S,开始算
      

  2.   


    public class Test implements Runnable
    {
    private long time;
    public Test(long time)
    {
    this.time = time;
    } @Override
    public void run()
    {
    try {
    Thread.sleep(time);
    } catch (InterruptedException e) {
    }
    dosomething();
    }
    private void dosomething()
    {
    System.out.println(time + "end");
    }

    public static void main(String[] args) throws InterruptedException {
    Thread t1 = new Thread(new Test(60 * 1000));
    t1.start();
    Thread.sleep(1000);
    Thread t2 = new Thread(new Test(30 * 1000));
    t2.start();
    t1.interrupt();
    Thread.sleep(1000);
    Thread t3 = new Thread(new Test(20 * 1000));
    t3.start();
    t2.interrupt();
    }
    }
      

  3.   


    有没有更好的方式,最好采用 wait,notify的方式。