نسخة الكود كما يلي:
حزمة com.yao ؛
استيراد java.util.concurrent.executorservice ؛
استيراد java.util.concurrent.executors ؛
استيراد java.util.concurrent.semaphore ؛
/**
* 4 تتم إضافة أجهزة التزامن الجديدة لتنسيق العمليات بين الخيوط في Java 5.0 ، وهي:
* Semaphore ، CountDownlatch ، Cyclicbarrier and Building.
* هذا المثال يقدم بشكل أساسي semaphore.
* Semaphore هي أداة تستخدم لإدارة تجمع الموارد ، والتي يمكن اعتبارها تمريرة.
* إذا أراد مؤشر ترابط الحصول على موارد من تجمع الموارد ، فيجب أن يحصل أولاً على تمريرة.
* إذا لم يتمكن مؤشر الترابط من الحصول على المرور مؤقتًا ، فسيتم حظر الخيط وإدخال حالة انتظار.
*/
الطبقة العامة mysemaphore يمتد الموضوع {
خاص INT I ؛
Semaphore Semaphore الخاص ؛
MySemaphore العامة (Int I ، Semaphore Semaphore) {
this.i = i ؛
this.semaphore = semaphore ؛
}
تشغيل الفراغ العام () {
if (semaphore.availablepermits ()> 0) {
System.out.println (""+i+"هناك مسافات متوفرة:") ؛
}آخر{
System.out.println (""+i+"انتظر ، لا مساحة") ؛
}
يحاول {
semaphore.Acquire () ؛
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
}
System.out.println (""+i+"الحصول على مساحة فارغة") ؛
يحاول {
thread.sleep ((int) Math.Random ()*10000) ؛
} catch (InterruptedException e) {
E.PrintStackTrace () ؛
}
system.out.println (""+i+"use use") ؛
semaphore.Release () ؛
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
semaphore semaphore = semaphore جديد (2) ؛
خدمة ExecutorService = Executors.NewCachedThreadPool () ؛
لـ (int i = 0 ؛ i <10 ؛ i ++) {
service.execute (mysemaphore جديد (i ، semaphore)) ؛
}
service.shutdown () ؛
semaphore.AcquireUninterrupturedructly (2) ؛
System.out.println ("المستخدمة ، يجب تنظيفها") ؛
semaphore.Release (2) ؛
}
}