जावा टाइमर का उपयोग कर रहा था, फिर शेड्यूल किए गए एक्सप्लोरर सेवा पर स्विच किया गया, लेकिन मेरी समस्या ठीक नहीं है। सिस्टम समय परिवर्तन (एनटीपीडी के माध्यम से) निर्धारित किए गए कार्यों को निर्दिष्ट विलंब पर निष्पादित नहीं किया जाता है। 64 बिट लिनक्स पर अपने लक्षित में JRE 1.6.0_26 64 बिट का उपयोग कर कुछ भी नहीं :(होता है के रूप में ही की कोई लॉग हैजावा शेड्यूलर जो सिस्टम समय परिवर्तनों से पूरी तरह से स्वतंत्र है
अद्यतन:।।। ScheduledExecutorService विंडोज पर ठीक काम करता है समस्या केवल पर है 64 बिट लिनक्स आधारित प्रणाली 64 बिट JVM चल रहा है। यह 64 बिट 32 बिट JVM ... अजीब। चल लिनक्स पर ठीक काम करता है नहीं या तो किसी भी ब्लॉग पर एक ही के किसी भी संदर्भ मिल गया है।
आईबीएम के जावा एसडीके एक ही समस्या है (ibm-java-sdk-7.0-0.0-x86_64-archive.bin)
मैं JDK 7139684 के खिलाफ दोष दायर किया था, यह स्वीकार कर लिया गया है, लेकिन बंद कर दिया गया और 6900441 की डुप्लीकेट चिह्नित। यह उसके लिए वोट करें, यदि आप इसके लायक हो तय करने के लिए लग रहा है ... मुझे पता नहीं क्यों अपने साल की जोड़ी की तुलना में अधिक के बाद से तय नहीं किया गया है
यहाँ नमूना कोड मैं इस मुद्दे का परीक्षण करने के लिए प्रयोग किया जाता है :
package test;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author yogesh
*
*/
public class TimerCheck implements Runnable {
ScheduledExecutorService worker;
public TimerCheck(ScheduledExecutorService worker) {
super();
this.worker = worker;
this.worker.schedule(this, 1, TimeUnit.SECONDS);
}
private static void update() {
System.out.println("TimerCheck.update() "+new Date(System.currentTimeMillis()));
}
@Override
public void run() {
update();
worker.schedule(this, 1, TimeUnit.SECONDS);
}
/**
* @param args
*/
public static void main(String[] args) {
ScheduledExecutorService worker = Executors.newScheduledThreadPool(1);
new TimerCheck(worker);
}
}
यह नमूना कोड मेरी मशीन ubuntu पर ठीक चलाता 11.10 [32 बिट], JVM 1.6.0_21 [32 बिट]। सिस्टम घड़ी बदलना निष्पादन को प्रभावित नहीं करता है। – Gopi
हाँ यह भी जांचता है कि 32 बिट जेवीएम चलने वाले 64 बिट लिनक्स पर ठीक चल रहा है :(। मेरे प्रश्न को तदनुसार अपडेट किया गया। – YoK
मैं यह इंगित करना चाहता हूं कि इस मामले में नैनोसेकंड निर्दिष्ट करना अर्थहीन है। आंतरिक रूप से, कोड भी मिलिस में बदल जाता है। तो 'worker.schedule (यह, 1000000000, TimeUnit.NANOSECONDS);' वर्कर्स.schedule (यह, 1, TimeUnit.SECONDS) के समान है; ' –