একটি টাইমার কীভাবে সেট করবেন, 2 মিনিটের জন্য বলুন, কোনও ডেটাবেসে কানেক্ট করার চেষ্টা করার পরে যদি কোনও সংযোগ আছে তবে ব্যতিক্রম নিক্ষেপ করবেন?
একটি টাইমার কীভাবে সেট করবেন, 2 মিনিটের জন্য বলুন, কোনও ডেটাবেসে কানেক্ট করার চেষ্টা করার পরে যদি কোনও সংযোগ আছে তবে ব্যতিক্রম নিক্ষেপ করবেন?
উত্তর:
সুতরাং উত্তরের প্রথম অংশটি হ'ল বিষয়টি যা জিজ্ঞাসা করে তা কীভাবে করা যায় কারণ আমি প্রাথমিকভাবে এটির ব্যাখ্যা কীভাবে করেছি এবং কয়েকটি লোক সহায়ক বলে মনে হয়েছিল। প্রশ্নটি তখন থেকেই স্পষ্ট হয়েছিল এবং আমি সেই উত্তরটির উত্তরটি প্রসারিত করেছি।
একটি টাইমার সেট করা হচ্ছে
প্রথমে আপনাকে একটি টাইমার তৈরি করতে হবে (আমি java.util
এখানে সংস্করণটি ব্যবহার করছি ):
import java.util.Timer;
..
Timer timer = new Timer();
একবার কাজটি চালানোর জন্য:
timer.schedule(new TimerTask() {
@Override
public void run() {
// Your database code here
}
}, 2*60*1000);
// Since Java-8
timer.schedule(() -> /* your database code here */, 2*60*1000);
আপনি যে সময়কালটি করবেন তার পরে টাস্কটি পুনরাবৃত্তি করতে:
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Your database code here
}
}, 2*60*1000, 2*60*1000);
// Since Java-8
timer.scheduleAtFixedRate(() -> /* your database code here */, 2*60*1000, 2*60*1000);
একটি টাস্ক সময়সীমা তৈরি করা
স্পষ্ট প্রশ্নটি যা নির্দিষ্ট সময়ের জন্য কোনও কাজ সম্পাদনের চেষ্টা করছে তা স্পষ্টভাবে করার জন্য, আপনি নিম্নলিখিতটি করতে পারেন:
ExecutorService service = Executors.newSingleThreadExecutor();
try {
Runnable r = new Runnable() {
@Override
public void run() {
// Database task
}
};
Future<?> f = service.submit(r);
f.get(2, TimeUnit.MINUTES); // attempt the task for two minutes
}
catch (final InterruptedException e) {
// The thread was interrupted during sleep, wait or join
}
catch (final TimeoutException e) {
// Took too long!
}
catch (final ExecutionException e) {
// An exception from within the Runnable task
}
finally {
service.shutdown();
}
যদি কার্যটি 2 মিনিটের মধ্যে শেষ হয় তবে ব্যতিক্রমগুলি সহ এটি সাধারণত সম্পাদন করে। যদি এটি এর চেয়ে বেশি সময় চালায় তবে টাইমআউট এক্সেপশন নিক্ষেপ করা হবে।
একটি বিষয় হ'ল আপনি যদি দুই মিনিটের পরে একটি সময়সীমা গ্রহণ করেন তবে কার্যটি আসলে চলতে থাকবে , যদিও সম্ভবত কোনও ডাটাবেস বা নেটওয়ার্ক সংযোগ শেষ পর্যন্ত সময় হয়ে যায় এবং থ্রেডে একটি ব্যতিক্রম ছুঁড়ে ফেলবে। তবে সচেতন থাকুন এটি হওয়া পর্যন্ত এটি সংস্থানগুলি গ্রাস করতে পারে।
এটা ব্যবহার কর
long startTime = System.currentTimeMillis();
long elapsedTime = 0L.
while (elapsedTime < 2*60*1000) {
//perform db poll/check
elapsedTime = (new Date()).getTime() - startTime;
}
//Throw your exception
ঠিক আছে, আমি মনে করি আমি এখন আপনার সমস্যাটি বুঝতে পারি। কিছু করার চেষ্টা করার জন্য আপনি ভবিষ্যতটি ব্যবহার করতে পারেন এবং কিছু না ঘটলে কিছুক্ষণ পরেই সময়সীমা নির্ধারণ করতে পারেন।
উদাহরণ:
FutureTask<Void> task = new FutureTask<Void>(new Callable<Void>() {
@Override
public Void call() throws Exception {
// Do DB stuff
return null;
}
});
Executor executor = Executors.newSingleThreadScheduledExecutor();
executor.execute(task);
try {
task.get(5, TimeUnit.SECONDS);
}
catch(Exception ex) {
// Handle your exception
}
new java.util.Timer().schedule(new TimerTask(){
@Override
public void run() {
System.out.println("Executed...");
//your code here
//1000*5=5000 mlsec. i.e. 5 seconds. u can change accordngly
}
},1000*5,1000*5);
[অ্যান্ড্রয়েড] যদি কেউ জাভা ব্যবহার করে অ্যান্ড্রয়েডে টাইমার প্রয়োগ করতে চান ।
ক্রিয়াকলাপ সম্পাদনের জন্য আপনার মতো ইউআই থ্রেড ব্যবহার করা দরকার ।
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
ActivityName.this.runOnUiThread(new Runnable(){
@Override
public void run() {
// do something
}
});
}
}, 2000));