2009-08-03 35 views
21

Tôi không phải là chuyên gia, chỉ là người mới bắt đầu. Vì vậy, tôi vui lòng yêu cầu bạn viết một số mã cho tôi.Gọi một chức năng cứ sau 10 phút

Nếu tôi có hai lớp, CLASS ACLASS B và bên trong CLASS B có một chức năng được gọi là funb(). Tôi muốn gọi hàm này từ CLASS A cứ 10 phút một lần.

Bạn đã cho tôi một số ý tưởng, tuy nhiên tôi không hiểu lắm.

Bạn có thể đăng một số mã mẫu không?

+4

Tôi nghĩ rằng ở đâu đó đằng sau này có một câu hỏi hợp lệ; đó là lý do tôi chỉnh sửa nó. – balpha

+1

@balpha: bạn đã thực hiện một số phép thuật ở đó: o –

Trả lời

9
import java.util.Date; 

import java.util.Timer; 

import java.util.TimerTask; 

public class ClassExecutingTask { 

    long delay = 10 * 1000; // delay in milliseconds 
    LoopTask task = new LoopTask(); 
    Timer timer = new Timer("TaskName"); 

    public void start() { 
     timer.cancel(); 
     timer = new Timer("TaskName"); 
     Date executionDate = new Date(); // no params = now 
     timer.scheduleAtFixedRate(task, executionDate, delay); 
    } 

    private class LoopTask extends TimerTask { 
     public void run() { 
      System.out.println("This message will print every 10 seconds."); 
     } 
    } 

    public static void main(String[] args) { 
     ClassExecutingTask executingTask = new ClassExecutingTask(); 
     executingTask.start(); 
    } 


} 
+0

Chỉ cần thay đổi độ trễ .... –

+0

TimerTask đã lỗi thời và đã được thay thế bằng ExecutorService và các triển khai liên quan. – skaffman

+2

Thật sao? Không thể tìm thấy bất cứ điều gì nói như vậy. Tôi muốn được quan tâm để xem các nguồn của bạn. Cảm ơn ! :) –

23

Có một cái nhìn tại ScheduledExecutorService:

Dưới đây là một lớp học với một phương pháp mà thiết lập một ScheduledExecutorService để phát ra tiếng bíp mỗi mười giây cho một giờ:

import static java.util.concurrent.TimeUnit.*; 
class BeeperControl { 
    private final ScheduledExecutorService scheduler = 
     Executors.newScheduledThreadPool(1); 

    public void beepForAnHour() { 
     final Runnable beeper = new Runnable() { 
       public void run() { System.out.println("beep"); } 
      }; 
     final ScheduledFuture<?> beeperHandle = 
      scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); 
     scheduler.schedule(new Runnable() { 
       public void run() { beeperHandle.cancel(true); } 
      }, 60 * 60, SECONDS); 
    } 
} 
2
public class datetime { 

    public String CurrentDate() { 

     java.util.Date dt = new java.util.Date(); 
     java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String currentTime = sdf.format(dt); 
     return currentTime; 

    } 

    public static void main(String[] args) { 
     class SayHello extends TimerTask { 

      datetime thisObj = new datetime(); 

      public void run() { 
       String todaysdate = thisObj.CurrentDate(); 
       System.out.println(todaysdate); 
      } 
     } 
     Timer timer = new Timer(); 
     timer.schedule(new SayHello(), 0, 5000); 
    } 
} 
6

Thử điều này. Nó sẽ lặp lại hàm run() sau mỗi phút thiết lập. Để thay đổi số phút đã đặt, hãy thay đổi biến MINUTES

int MINUTES = 10; // The delay in minutes 
Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { // Function runs every MINUTES minutes. 
     // Run the code you want here 
     CLASSB.funcb(); // If the function you wanted was static 
    } 
}, 0, 1000 * 60 * MINUTES); 
    // 1000 milliseconds in a second * 60 per minute * the MINUTES variable. 

Đừng quên nhập khẩu!

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

Mọi chi tiết, hãy vào đây:

http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html

Các vấn đề liên quan