Ejemplo n.º 1
0
  @Test
  public void testLockFailed() throws IOException, InterruptedException {
    RedisProcess redis1 = redisTestMultilockInstance(6320);
    RedisProcess redis2 = redisTestMultilockInstance(6321);

    RedissonClient client1 = createClient("127.0.0.1:6320");
    RedissonClient client2 = createClient("127.0.0.1:6321");

    RLock lock1 = client1.getLock("lock1");
    RLock lock2 = client1.getLock("lock2");
    RLock lock3 = client2.getLock("lock3");

    Thread t1 =
        new Thread() {
          public void run() {
            lock2.lock();
            lock3.lock();
          };
        };
    t1.start();
    t1.join();

    Thread t =
        new Thread() {
          public void run() {
            RedissonMultiLock lock = new RedissonRedLock(lock1, lock2, lock3);
            lock.lock();

            try {
              Thread.sleep(3000);
            } catch (InterruptedException e) {
            }

            lock.unlock();
          };
        };
    t.start();
    t.join(1000);

    RedissonMultiLock lock = new RedissonRedLock(lock1, lock2, lock3);
    Assert.assertFalse(lock.tryLock());

    assertThat(redis1.stop()).isEqualTo(0);
    assertThat(redis2.stop()).isEqualTo(0);
  }