برنامهای بنویسید که یک لیست از اعداد صحیح را با استفاده از یک FixedThreadPool پردازش کند؛ هر تسک به صورت Callable مربع عدد را محاسبه کند، نتایج با استفاده از Future جمعآوری شده و در پایان چاپ شوند.
15.0 بازدید آخرین ویرایش در 199 روز قبل ساعت 23:35 0.0
از ExecutorService (مثلاً Executors.newFixedThreadPool) استفاده کنید، هر عدد را در یک Callable بپیچید و با submit تسکها را ارسال کنید، سپس لیست Futureها را پیمایش کرده و با get نتایج را دریافت و چاپ کنید. حتماً پس از ارسال تسکها executor را با shutdown و در صورت نیاز awaitTermination ببندید، از try/finally برای تضمین بستن منابع استفاده کنید و اگر نتایج را در ساختار مشترکی میریزید از ساختارهای thread-safe یا همگامسازی مناسب بهره ببرید؛ میتوانید بهعنوان جایگزین از invokeAll برای ارسال جمعی Callableها استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای ارسال مجموعهای از Callableها از Executors.newFixedThreadPool استفاده کنید و آنها را با submit یا invokeAll ارسال کنید؛ invokeAll سادهتر است چون لیست Futures را همزمان برمیگرداند و ترتیب را حفظ میکند. در هنگام فراخوانی Future.get حتماً InterruptedException و ExecutionException را هندل کنید یا از timeout استفاده کنید چون get میتواند بلاک کند. بعد از ارسال تسکها از try/finally برای shutdown و awaitTermination استفاده کنید و در صورت نیاز shutdownNow را مدیریت کنید تا منابع آزاد شوند. اگر نتایج را در ساختار مشترکی میریزید از ساختارهای thread-safe مثل ConcurrentLinkedQueue یا Collections.synchronizedList استفاده کنید تا همگامسازی صحیح برقرار باشد.
گزارش