2012-07-06 58 views

Trả lời

32

Sử dụng một lớp học java.util.Timer bạn có thể tạo bộ hẹn giờ và lên lịch để chạy vào thời gian cụ thể.

Dưới đây là ví dụ:

//The task which you want to execute 
private static class MyTimeTask extends TimerTask 
{ 

    public void run() 
    { 
     //write your code here 
    } 
} 

public static void main(String[] args) { 

    //the Date and time at which you want to execute 
    DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = dateFormatter .parse("2012-07-06 13:05:45"); 

    //Now create the time and schedule it 
    Timer timer = new Timer(); 

    //Use this if you want to execute it once 
    timer.schedule(new MyTimeTask(), date); 

    //Use this if you want to execute it repeatedly 
    //int period = 10000;//10secs 
    //timer.schedule(new MyTimeTask(), date, period); 
} 
+0

bạn sử dụng 'khoảng thời gian' ở đâu? – Sami

+0

đã chỉnh sửa câu trả lời –

+1

javadoc của Timer đề xuất sử dụng 'ScheduledThreadPoolExecutor' được giới thiệu trong Java 5: http://stackoverflow.com/a/11361397/829571 – assylias

6

của nó là có thể, và tôi sẽ sử dụng một thư viện như http://quartz-scheduler.org/

thạch anh là một mã nguồn mở dịch vụ lập lịch trình công việc đầy đủ tính năng có thể được tích hợp với, hoặc sử dụng cùng bên hầu như bất kỳ EE Java hay Ứng dụng Java SE - từ ứng dụng độc lập nhỏ nhất đến hệ thống thương mại điện tử lớn nhất. Thạch anh có thể được sử dụng để tạo ra lịch trình đơn giản hoặc phức tạp để thực hiện hàng chục, hàng trăm hoặc thậm chí hàng chục nghìn việc làm; các công việc có nhiệm vụ được định nghĩa là các thành phần Java tiêu chuẩn có thể thực thi hầu như bất cứ điều gì bạn có thể lập trình để thực hiện.

2

Bạn có thể sử dụng lớp Timer

Từ tài liệu:

Một cơ sở cho đề để sắp xếp công việc để thực hiện trong tương lai trong một chủ đề nền. Các tác vụ có thể được lập lịch để thực hiện một lần hoặc để thực hiện lặp lại theo các khoảng thời gian đều đặn.

Phương thức schedule(TimerTask task, Date time) là chính xác những gì bạn muốn: Lập lịch nhiệm vụ được chỉ định để thực hiện tại thời điểm được chỉ định.

Nếu bạn cần lịch biểu ở định dạng cron, quartz sẽ là giải pháp tốt. (quartz cron like schedule)

2

Như tôi biết bạn có thể sử dụng Quartz-scheduler cho việc này. Tôi chưa sử dụng nó, nhưng nhiều người đã đề nghị nó cho tôi.

2

Bạn có thể sử dụng một ScheduledExecutorService, đó là "một sự thay thế linh hoạt hơn cho sự kết hợp Timer/TimerTask" (theo Timer's javadoc):

long delay = ChronoUnit.MILLIS.between(LocalTime.now(), LocalTime.of(13, 5, 45)); 
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.schedule(task, delay, TimeUnit.MILLISECONDS); 
2

Nếu bạn đang nói về SE thì lớp Timer có thể là những gì bạn đang tìm kiếm http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html, có sẵn từ Java 5.

Nếu bạn cần thời gian trong ngữ cảnh máy chủ ứng dụng, tôi khuyên bạn nên xem EJB timers http://www.javabeat.net/2007/03/ejb-3-0-timer-services-an-overview/ sẵn có kể từ EJB 3.0. Ngoài ra, tùy thuộc vào những gì bạn đang thực sự cố gắng làm, bạn có thể giải thích nếu sử dụng công việc cron (hoặc bất kỳ phương pháp hẹn giờ dựa trên hệ điều hành nào khác) sẽ phù hợp hơn, tức là bạn không muốn hoặc không có VM chạy mọi lúc.

2

Có thể.Bạn có thể lập lịch một phương pháp tại một số thời điểm bằng cách sử dụng TimerTimerTask.

Ví dụ:

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 10); 
calendar.set(Calendar.MINUTE, 30); 
calendar.set(Calendar.SECOND, 0); 

Date alarmTime = calendar.getTime(); 

Timer _timer = new Timer(); 
_timer.schedule(foo, alarmTime); 

Tham khảo những liên kết này:

1

bản demo đơn giản của java.util.Timer

Timer t=new Timer(); 
t.schedule(new TimerTask() { 
    public void run() { 
     foo(); 
    } 
}, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2012-07-06 13:40:20")); 
Các vấn đề liên quan