এক্সিকিউট করুন : আগুনের জন্য এটি ব্যবহার করুন এবং কলগুলি ভুলে যান
জমা দিন : পদ্ধতি কলের ফলাফল পরিদর্শন করতে এবং কলFuture
দ্বারা প্রত্যাখ্যানকরাআপত্তিরউপর যথাযথ ব্যবস্থা গ্রহণের জন্যএটি ব্যবহার করুন
জাভাদোকস থেকে
submit(Callable<T> task)
মৃত্যুদন্ড কার্যকর করার জন্য একটি মূল্য-ফিরিয়ে দেওয়া টাস্ক জমা দেয় এবং কার্যের মুলতুবি থাকা ফলাফলগুলি উপস্থাপন করে একটি ভবিষ্যত প্রদান করে।
Future<?> submit(Runnable task)
মৃত্যুদন্ড কার্যকর করার জন্য একটি রান্নেবল টাস্ক জমা দেয় এবং সেই টাস্কের প্রতিনিধিত্ব করে ভবিষ্যত প্রদান করে।
void execute(Runnable command)
ভবিষ্যতে কিছু সময় প্রদত্ত আদেশটি কার্যকর করে। কমান্ডটি এক্সিকিউটার বাস্তবায়নের বিবেচনার ভিত্তিতে একটি নতুন থ্রেডে, কোনও পুলড থ্রেডে বা কলিং থ্রেডে কার্যকর করতে পারে।
ব্যবহার করার সময় আপনাকে অবশ্যই সাবধানতা অবলম্বন করতে হবে submit()
। আপনি যদি try{} catch{}
ব্লগে আপনার টাস্ক কোড এম্বেড না করেন তবে এটি ফ্রেমওয়ার্কটিতেই ব্যতিক্রম লুকায় ।
উদাহরণ কোড: এই কোডটি গ্রাস করে Arithmetic exception : / by zero
।
import java.util.concurrent.*;
import java.util.*;
public class ExecuteSubmitDemo{
public ExecuteSubmitDemo()
{
System.out.println("creating service");
ExecutorService service = Executors.newFixedThreadPool(10);
//ExtendedExecutor service = new ExtendedExecutor();
service.submit(new Runnable(){
public void run(){
int a=4, b = 0;
System.out.println("a and b="+a+":"+b);
System.out.println("a/b:"+(a/b));
System.out.println("Thread Name in Runnable after divide by zero:"+Thread.currentThread().getName());
}
});
service.shutdown();
}
public static void main(String args[]){
ExecuteSubmitDemo demo = new ExecuteSubmitDemo();
}
}
আউটপুট:
java ExecuteSubmitDemo
creating service
a and b=4:0
একই কোড প্রতিস্থাপন ছোঁড়ার submit()
সঙ্গে execute
():
প্রতিস্থাপন করা
service.submit(new Runnable(){
সঙ্গে
service.execute(new Runnable(){
আউটপুট:
java ExecuteSubmitDemo
creating service
a and b=4:0
Exception in thread "pool-1-thread-1" java.lang.ArithmeticException: / by zero
at ExecuteSubmitDemo$1.run(ExecuteSubmitDemo.java:14)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
সাবমিট () ব্যবহার করার সময় এই জাতীয় পরিস্থিতিগুলি কীভাবে পরিচালনা করবেন?
- Tas} ক্যাচ Embed} ব্লক কোড দিয়ে আপনার টাস্ক কোড ( হয় চলমান বা কলযোগ্য প্রয়োগকরণ) এম্বেড করুন
- বাস্তবায়ন
CustomThreadPoolExecutor
নতুন সমাধান:
import java.util.concurrent.*;
import java.util.*;
public class ExecuteSubmitDemo{
public ExecuteSubmitDemo()
{
System.out.println("creating service");
//ExecutorService service = Executors.newFixedThreadPool(10);
ExtendedExecutor service = new ExtendedExecutor();
service.submit(new Runnable(){
public void run(){
int a=4, b = 0;
System.out.println("a and b="+a+":"+b);
System.out.println("a/b:"+(a/b));
System.out.println("Thread Name in Runnable after divide by zero:"+Thread.currentThread().getName());
}
});
service.shutdown();
}
public static void main(String args[]){
ExecuteSubmitDemo demo = new ExecuteSubmitDemo();
}
}
class ExtendedExecutor extends ThreadPoolExecutor {
public ExtendedExecutor() {
super(1,1,60,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(100));
}
// ...
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if (t == null && r instanceof Future<?>) {
try {
Object result = ((Future<?>) r).get();
} catch (CancellationException ce) {
t = ce;
} catch (ExecutionException ee) {
t = ee.getCause();
} catch (InterruptedException ie) {
Thread.currentThread().interrupt(); // ignore/reset
}
}
if (t != null)
System.out.println(t);
}
}
আউটপুট:
java ExecuteSubmitDemo
creating service
a and b=4:0
java.lang.ArithmeticException: / by zero
Runnable
একটি আবৃত পরারTask
বা না হয়, আপনি উপর কোন নিয়ন্ত্রণ আছে হতে পারে। উদাহরণস্বরূপ, যদি আপনিExecutor
প্রকৃতপক্ষে একটি হন তবেScheduledExecutorService
আপনার কার্য অভ্যন্তরীণভাবেFuture
একটিতে আবৃতThrowable
হবে এবং অবহিত গুলি এই বস্তুর সাথে আবদ্ধ থাকবে।