يلخص هذا الكلمات الرئيسية القابلة للتشغيل ، القابلة للاتصال ، المستقبلي ، مستقبلات مستقبلات ، ExecutorService ، Excetor ، Excutors ، و Threadpoolexcetor في Java هذه الكلمات الرئيسية واستخدامها.
أول تصنيف لهم:
قابل للتشغيل ، قابل للاستدعاء
المستقبل ، مستقبلات
ExecutorService ، Excetor ، Excutors ، Threadpoolexcetor
1. حول قابلة للتشغيل ويمكن الاتصال
بادئ ذي بدء ، هناك ثلاث طرق لإنشاء مؤشرات ترابط في Java:
مزايا وعيوب ثلاثة تطبيقات:
بسبب ترابط الخيط ، لا يمكن ورث فئات أخرى ، والخيط الحالي يمكن الحصول عليه.
قم بتنفيذ الواجهة القابلة للتشغيل ، بدون قيمة إرجاع ، احصل على مؤشر الترابط الحالي.
قم بتنفيذ الواجهة القابلة للاتصال ، يمكنك الحصول على قيمة الإرجاع من خلال Future.get () والحصول على سلسلة الرسائل الحالية.
الخيط المورث ، خطوتين:
class demothRead يمتد Thread {Override public void run () {super.run () ؛ // إجراء عملية مستهلكة للوقت ...}} demothRead t = new demothRead () ؛ t.start () ؛لتنفيذ قابلة للتشغيل ، استخدم بشكل عام على النحو التالي:
مؤشر ترابط جديد (جديد RunNable () {Override public void run () {// افعل شيئًا}}). start () ؛للبساطة.
من المزعج للغاية الحصول على نتائج تنفيذ مؤشر الترابط في الطريقتين أعلاه ولا يمكن الحصول عليها مباشرة. يضيف JDK1.5 طريقة استدعاء () قابلة للاتصال () لإرجاع القيم ورمي الاستثناءات. يمكن استدعاء كائن مستقبلي محمّل بنتائج الحساب.
رمز المصدر القابل للاتصال:
الواجهة العامة قابلة للاتصال <v> {v call () رمي الاستثناء ؛}الاستخدام الأساسي للاستدعاء:
FutureTask <integer> futureTask = new FutureTask <integer> (جديد قابل للاتصال <integer> () {Override public integer call () يلقي استثناء {// القيام بشيء عودة فارغ ؛يمكن أن يحصل تشغيل المهمة القابلة للاتصال على كائن مستقبلي وتنفيذ قيمة الإرجاع بواسطة مؤشر الترابط من خلال طريقة GET () في المستقبل. ثم ... المستقبل ،
ما هو الفرق بين مستقبلات المستقبل وكيفية استخدامه؟
-> التالي ()
2. حول المستقبل ومهام المستقبل
من أجل الحصول على نتائج تنفيذ مؤشر الترابط ، تم تقديم أسعار مستقبلية Future في Future. إذن ما هي علاقتهم وكيفية استخدامها؟
يقع الفصل المستقبلي تحت حزمة java.util.concurrent ، وهي واجهة:
الواجهة العامة في المستقبل <V> {Boolean Cancel (Boolean Mayinterrupruptifrunning) ؛ منطقية iscancelled () ؛ منطقية isDone () ؛ V GET () رميات InterruptedException ، ExecutionException ؛ V GET (ant timeout ، timeunit und) رميات interruptedException ، ExecutionException ، timeoutexception ؛}يحدد المستقبل 5 طرق:
1) الإلغاء المنطقي (Boolean May Interruptifrunning): محاولة إلغاء تنفيذ هذه المهمة. إذا تم الانتهاء من المهمة ، أو تم إلغاؤها ، أو لا يمكن إلغاؤها لسبب آخر ، فستفشل هذه المحاولة. عند استدعاء Cancel () ، إذا نجحت المكالمة ولم يتم بدء المهمة ، فلن يتم تشغيل المهمة أبدًا. إذا تم بدء المهمة ، تحدد المعلمة MayinTrupruptIfrunning ما إذا كان يجب أن يقطع مؤشر الترابط الذي ينفذ المهمة بطريقة تحاول إيقاف المهمة. بعد إرجاع هذه الطريقة ، ستعود المكالمات اللاحقة إلى ISDONE () دائمًا. إذا كانت هذه الطريقة تُرجع بشكل صحيح ، فستعود المكالمات اللاحقة إلى iScancelled () دائمًا.
2) المنطقية Iscancelled (): إرجاع صحيح إذا تم إلغاء المهمة قبل أن تكمل بشكل طبيعي.
3) Boolean ISDONE (): Return True إذا تم الانتهاء من المهمة. قد يتم ذلك بسبب الإنهاء الطبيعي أو الاستثناء أو الإلغاء ، في جميع هذه الحالات ، ستعود هذه الطريقة بشكل صحيح.
4) V GET () رميات InterruptedException ، ExecutionException: إذا لزم الأمر ، انتظر إكمال الحساب ثم الحصول على النتيجة.
5) V GET (timeout ، وحدة الوقت الزمني) رميات المقاطعات ، ExecutionException ، TimeoutException: إذا لزم الأمر ، انتظر على الأكثر بعد الوقت المحدد لإكمال الحساب ، والحصول على النتيجة (إذا كانت النتيجة متوفرة).
بشكل عام ، يوفر المستقبل ثلاث وظائف:
تحديد ما إذا كانت المهمة قد اكتملت ؛
القدرة على مقاطعة المهام.
قادر على الحصول على نتائج تنفيذ المهمة.
النقاط الرئيسية:
يرث RunNableFuture واجهة Runnable والواجهة المستقبلية ، بينما يقوم FutureTask بتنفيذ واجهة RunNableFuture.
تنفيذ مستقبلات FutureTash:
تنفذ مقاس مستقبلي من الطبقة العامة <v> runnablefuture <v>
تنفيذ واجهة RunNableFuture:
الواجهة العامة RunNableFuture <v> يمتد Runnable ، مستقبلي <v> {void run () ؛}FutureTask هي فئة تنفيذ فريدة من نوعها في الواجهة المستقبلية.
بالإضافة إلى التفاف مستقبلات FutureTash مع موضوع ، هناك طريقة أخرى لاستخدامها:
ExecutorService Executor = Executors.NewCacheDthReadPool () ؛ FutureTask <Integer> futureTask = new FutureTask <integer> (new callable <integer> () {Override public integer call () يلقي الاستثناء {// القيام بشيء عائد ؛}}) ؛ eventor. يتم استخدام إطار المنفذ هنا.
-> التالي () ؛
3. حول ExecutorService ، Excetor ، Excutors ، Threadpoolexcetor
تم تقديم إطار عمل المنفذ في Java 5. إطار العمل المنفذ هو إطار عمل ينفذ المهام غير المتزامنة التي تنفذ مكالمات السياسة والجداول والطاقة والضوابط.
قبل الحديث عن إطار المنفذ ، نحتاج إلى تقديم مفهوم جديد - ThreadPoolexecutor:
public threadpoolexecutor (intcorepoolsize ، int maximumpoolsize ، keepalivetime الطويل ، وحدة الوقت ، blockingqueue <runnable> workqueue ، threadfactory threadfactory ، rejectedExecutionHandler معالج)
ThreadPoolexecutor هو التنفيذ الأساسي لفئة المنفذين.
في وثائق مساعدة JDK ، هناك مقطع:
"يوصى بشدة أن يستخدم المبرمجون أساليب المصنع الأكثر ملاءمة للمنفذين. newcachedthreadpool () (تجمع مؤشرات ترابط غير محدود ، والذي يمكنه أداء إعادة تدوير مؤشرات الترابط التلقائي) ، و Evelopors.NewFixedThreadPool (int) (pool-size-size) ، و sevice.
إذن ما هي شركة ExecutorService و Excetor و Excutors؟
Excetor هي واجهة أساسية على المستوى التجريدي:
الواجهة العامة executor {void execute (runnable command) ؛}تقوم واجهة ExecutorService بتوسيع واجهة المنفذ وتوفر طرقًا مثل إرجاع الكائنات المستقبلية ، وإنهاء ، وإغلاق تجمعات الخيوط ، وما إلى ذلك.
الواجهة العامة executorService يمتد executor {void leptdown () ؛ <T> المستقبل <T> إرسال (المهمة القابلة للاتصال <T>) ؛ <T> المستقبل <T> إرسال (مهمة Runnable ، T نتيجة) ؛ <T> قائمة <المستقبل <T>> invokeall (مجموعة <؟ تمتد المهام القابلة للاتصال <T >> ، فترة طويلة ، وحدة التوقيت) رميات InterruptedException ؛}المنفذون هو فئة أدوات مماثلة للمجموعات. يوفر أساليب المصنع لإنشاء أنواع مختلفة من تجمعات الخيوط ، مثل الثابتة pool أو cachedthreadpool.
منفذ الفئة العامة {public static eventorservice newfixedthreadpool (int nthreads) {return new threadpoolexecutor (nThReads ، nThReads ، 0L ، timeUnit.milliseconds ، new LinkedBlockingqueue <Runnable> ()) ؛ } static static executorservice newCachedThreadPool () {return new threadpoolexecutor (0 ، integer.max_value ، 60l ، timeunit.seconds ، متزامن جديد <Runnable> ()) ؛ }}ما سبق هو عبارة عن مجموعة من الكلمات الرئيسية متعددة الخيوط Java ، لذلك لن تكون فوضوية.
ما ورد أعلاه هو تنفيذ فرز الكلمات الرئيسية متعددة الخيوط في Java التي قدمها المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!