+2 امتیاز
قبل در برنامه نویسی توسط (2.6هزار امتیاز)
ویرایش شده قبل توسط
در java.util.concurent  یک اینترفیس به نام Future وجود دارد .

لطفا کمی در مورد آن توضیح دهید

1 پاسخ

+3 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

Future<T> درواقع یک اشاره گر به شئی از جنس T است که در حال حاضر موجود نیست (برای مثال محاسبه آن تمام نشده است). مثل کلید یک ماشین می ماند که هنوز ساخته نشده. 

استفاده از مفاهیمی مثل Future و Promise بعنوان pattern ثابت شده در برنامه نویسی concurent به سبک asynchronous و Non-blocking در بسیاری از زبان های برنامه نویسی و فریم ورک ها مرسوم است. در جاوا هم اینترفیس Future برای همین سبک برنامه نویسی طراحی شده است. التبه بدلیل مشکلات طراحی که اینترفیس Future داست، CompletableFuture در جاوا 8 معرفی شد. در این سبک برنامه نویسی concurent، متد ها بجای block کردن فرآیند اجرا برنامه در زمان برگرداندن شئ، Future ی از آن شئ بر می گردانند.

private static final ExecutorService pool = Executors.newFixedThreadPool(10);
 
public static Future<String> startComputation() throws IOException {
    return pool.submit(new Callable<String>() {
        @Override
        public String call() throws Exception {
            Thread.currentThread().sleep(3000);
            return "finish computation";
        }
    });
}
 
public static void main(String[] args) throws IOException, InterruptedException, ExecutionException {
    final Future<String> contentsFuture = startComputation();
     
    while (!contentsFuture.isDone()) {
        System.out.println("computation in progress...");
        System.out.println("do another work");
        Thread.currentThread().sleep(1000);
    }
     
    System.out.println(contentsFuture.get());
     
    System.exit(0);
}

در مثال بالا، متد startComputation برای محاسبه مقدار String بازگشتی نیاز به زمان نامشخص دارد برای همین بجای نوع String، نوع Future<String> بر می گرداند تا برنامه block نشود.

سوالات مشابه

+1 امتیاز
1 پاسخ 530 بازدید
0 امتیاز
1 پاسخ 432 بازدید
0 امتیاز
1 پاسخ 385 بازدید
+1 امتیاز
1 پاسخ 1.3هزار بازدید
0 امتیاز
0 پاسخ 785 بازدید
0 امتیاز
0 پاسخ 565 بازدید
+1 امتیاز
1 پاسخ 825 بازدید
0 امتیاز
1 پاسخ 1.0هزار بازدید
0 امتیاز
1 پاسخ 1.3هزار بازدید
...