复制代码代码如下:
Импорт java.util.concurrent.countdownlatch;
импортировать java.util.concurrent.executorservice;
импортировать java.util.concurrent.executors;
импортировать java.util.concurrent.timeUnit;
Import com.netflix.curator.retrypolicy;
import com.netflix.curator.framework.curatorframework;
import com.netflix.curator.framework.curatorframeworkfactory;
import com.netflix.curator.framework.recipes.locks.interprocessmutex;
Import com.netflix.curator.retry.exponentialbackoffretry;
открытый класс Testcuratorlock {
/**
* @param args
* @Throws прерывается
*/
Public Static void Main (String [] args) бросает прерывание
// TODO Автогенерированный метод заглушка
Countdownlatch latch = new countdownlatch (5);
String Zookeeperconconcestring = "Localhost: 2181, Localhost: 2182, Localhost: 2183";
Retrypolicy retrypolicy = new Exponentialbackaffretry (1000, 3);
CuratorFrameWork Client = CuratorFrameWorkFactory.NewClient (
Zookeeperconconcestring, повторная проверка);
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 реализует Runnable {
Приватное название строки;
Private CuratorFramework Client;
Частная защелка Countdownlatch;
public mylock (имя строки, CuratorFramework Client, CountDownLatch Latch) {
this.name = name;
this.client = client;
this.latch = latch;
}
public String getName () {
вернуть имя;
}
public void setName (string name) {
this.name = name;
}
@Override
public void run () {
// TODO Автогенерированный метод заглушка
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 (Exception e) {
// Todo Auto Generated Catch Blach
e.printstacktrace ();
}
}
}
}