package com.easyooo.framework.support.zookeeper; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.recipes.locks.InterProcessMutex; import org.apache.curator.retry.ExponentialBackoffRetry; import org.junit.Test; /** * * @author Killer */ public class InterProcessMutexTest { final static String zkConnectionString = "localhost:2181"; private CuratorFramework zkClient; private String lockPath = "/my/curator"; private int counter = 0; private final int THREAD_COUNT = 30; @Test public void testIfPrint() throws InterruptedException{ final CountDownLatch gate = new CountDownLatch(1); final CountDownLatch endGate = new CountDownLatch(THREAD_COUNT); final List<String> bufferList = new ArrayList<String>(); try{ RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); zkClient = CuratorFrameworkFactory.newClient( zkConnectionString, retryPolicy); zkClient.start(); for (int i = 0; i < THREAD_COUNT; i++) { new Thread(new Runnable() { @Override public void run() { try { gate.await(); boolean flag = false; int value = 0; InterProcessMutex lock = new InterProcessMutex(zkClient, lockPath); if (lock.acquire(120, TimeUnit.SECONDS)){ try { counter ++; if(counter % 2 == 0){ flag = true; value = counter; } }finally { lock.release(); } } if(flag){ bufferList.add(Thread.currentThread().getName() + " -> " + value); } } catch (Exception e) { e.printStackTrace(); }finally{ endGate.countDown(); } } }).start(); } System.out.println("开始计算..."); gate.countDown(); endGate.await(); for (String s : bufferList) { System.out.println(s); } System.out.println("算法结束."); System.out.println("释放链接."); }finally{ zkClient.close(); } } public static void main(String[] args) { String regex = "^(\\d{11})|(0431\\d{8})|(0432\\d{8})|([a-zA-Z]{4}\\d{12})$"; boolean flag= Pattern.matches(regex, "hello"); System.out.println(flag); } }