源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用curator实现zookeeper锁服务的示例分享

  • 时间:2021-05-11 06:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用curator实现zookeeper锁服务的示例分享
[u]复制代码[/u] 代码如下:
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import 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; public class TestCuratorLock {  /**   * @param args   * @throws InterruptedException   */  public static void main(String[] args) throws InterruptedException {   // TODO Auto-generated method stub   CountDownLatch latch = new CountDownLatch(5);   String zookeeperConnectionString = "localhost:2181,localhost:2182,localhost:2183";   RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);   CuratorFramework client = CuratorFrameworkFactory.newClient(     zookeeperConnectionString, retryPolicy);   client.start();   System.out.println("客户端启动。。。。");   ExecutorService exec = Executors.newCachedThreadPool();   for (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("客户端关闭。。。。");  }  static class MyLock implements Runnable {   private String name;   private CuratorFramework client;   private CountDownLatch latch;   public MyLock(String name, CuratorFramework client, CountDownLatch latch) {    this.name = name;    this.client = client;    this.latch = latch;   }   public String getName() {    return name;   }   public void setName(String name) {    this.name = name;   }   @Override   public void run() {    // TODO Auto-generated method stub    InterProcessMutex lock = new InterProcessMutex(client,      "/test_group");    try {     if (lock.acquire(120, TimeUnit.SECONDS)) {      try {       // do some work inside of the critical section here       System.out.println("----------" + this.name         + "获得资源----------");       System.out.println("----------" + this.name         + "正在处理资源----------");       Thread.sleep(10 * 1000);       System.out.println("----------" + this.name         + "资源使用完毕----------");       latch.countDown();      } finally {       lock.release();       System.out.println("----------" + this.name         + "释放----------");      }     }    } catch (Exception e) {     // TODO Auto-generated catch block     e.printStackTrace();    }    }  }  }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部