复制代码代码如下:
استيراد java.util.concurrent.countdownlatch ؛
استيراد java.util.concurrent.executorservice ؛
استيراد java.util.concurrent.executors ؛
استيراد java.util.concurrent.timeunit ؛
استيراد com.netflix.curator.retrypolicy ؛
استيراد com.netflix.curator.framework.curatorframework ؛
استيراد com.netflix.curator.framework.curatorframeworkfactory ؛
استيراد com.netflix.curator.framework.recipes.locks.InterprocessMutex ؛
استيراد com.netflix.curator.retry.exponentialbackoffretry ؛
فئة عامة testCuratorlock {
/**
* param args
* throws interruptedException
*/
رميات الفراغ الثابتة العامة (سلسلة [] args)
// TODO METHOTION METTOD COBS
CountDownLatch Latch = New CountDownLatch (5) ؛
String ZookeeperConnectionString = "LocalHost: 2181 ، LocalHost: 2182 ، LocalHost: 2183" ؛
RetryPolicy RetryPolicy = جديد proentialbackoffretry (1000 ، 3) ؛
عميل CoratorFramework = contatorframeworkfactory.newclient (
ZookeeperConnectionString ، Retrypolicy) ؛
client.start () ؛
System.out.println ("客户端启动。。。。") ؛
ExecutorService exec = Executors.NewCacheDthReadPool () ؛
لـ (int i = 0 ؛ i <5 ؛ i ++) {
exec.submit (new mylock ("client" + i ، client ، latch)) ؛
}
exec.shutdown () ؛
latch.await () ؛
System.out.println ("所有任务执行完毕") ؛
client.close () ؛
System.out.println ("客户端关闭。。。。") ؛
}
فئة ثابتة mylock تنفذ {
اسم السلسلة الخاصة ؛
عميل خاص من العميل
قفل العد التنازلي الخاص ؛
mylock العامة (اسم السلسلة ، عميل CoratorFramework ، CountDownLatch Latch) {
this.name = name ؛
this.client = العميل ؛
this.latch = latch ؛
}
السلسلة العامة getName () {
اسم العودة
}
public void setName (اسم السلسلة) {
this.name = name ؛
}
@تجاوز
تشغيل الفراغ العام () {
// TODO METHOTION METTOD COBS
InterprocessMutex Lock = New InterprocessMutex (العميل ،
"/test_group") ؛
يحاول {
if (lock.acquire (120 ، timeunit.seconds)) {
يحاول {
// قم ببعض الأعمال داخل القسم الحرج هنا
System.out.println ("----------" + this.name
+ "获得资源 ----------") ؛
System.out.println ("----------" + this.name
+ "正在处理资源 ----------") ؛
thread.sleep (10 * 1000) ؛
System.out.println ("----------" + this.name
+ "资源使用完毕 ----------") ؛
latch.countdown () ؛
} أخيراً {
lock.Release () ؛
System.out.println ("----------" + this.name
+ "释放 ----------") ؛
}
}
} catch (استثناء e) {
// TODO AUTO CATCH BLOCK
E.PrintStackTrace () ؛
}
}
}
}