public void testConcurrentResolve() throws Exception {
    // we use different settings because Ivy do not support multi thread resolve with the same
    // settings yet and this is not what this test is about: the focus of this test is running
    // concurrent resolves in separate vms but using the same cache. We don't span the test on
    // multiple vms, but using separate settings we should only run into shared cache related
    // issues, and not multi thread related issues.
    IvySettings settings1 = new IvySettings();
    IvySettings settings2 = new IvySettings();
    IvySettings settings3 = new IvySettings();

    // run 3 concurrent resolves, one taking 100ms to download files, one 20ms and one 5ms
    // the first one do 10 resolves, the second one 20 and the third 50
    // note that the download time is useful only at the very beginning, then the cached file is
    // used
    ResolveThread t1 =
        asyncResolve(settings1, createSlowResolver(settings1, 100), "org6#mod6.4;3", 10);
    ResolveThread t2 =
        asyncResolve(settings2, createSlowResolver(settings2, 20), "org6#mod6.4;3", 20);
    ResolveThread t3 =
        asyncResolve(settings3, createSlowResolver(settings3, 5), "org6#mod6.4;3", 50);
    t1.join(100000);
    t2.join(20000);
    t3.join(20000);
    assertEquals(10, t1.getCount());
    assertFound("org6#mod6.4;3", t1.getFinalResult());
    assertEquals(20, t2.getCount());
    assertFound("org6#mod6.4;3", t2.getFinalResult());
    assertEquals(50, t3.getCount());
    assertFound("org6#mod6.4;3", t3.getFinalResult());
  }
 private ResolveThread asyncResolve(
     IvySettings settings, FileSystemResolver resolver, String module, int loop) {
   ResolveThread thread = new ResolveThread(settings, resolver, module, loop);
   thread.start();
   return thread;
 }