« Return to Thread: Code to reproduce threading bug

Code to reproduce threading bug

by Eric Burke-3 :: Rate this Message:

Reply to Author | View in Thread

This quick and dirty hack demonstrates the threading bug in Namespace.java that I posted earlier today. If I run this several times, it eventually hangs forever.

By adding the synchronized keyword to the Namespace.getNamespace(...) method, the program seems to always work.



import org.jdom.Namespace;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class JdomThreadBug {

    public static void main(String[] args) throws InterruptedException {
        ExecutorService es = Executors.newCachedThreadPool();

        int numThreads = 100;
        CountDownLatch startLatch = new CountDownLatch(1);
        for (int i = 0; i < numThreads; i++) {
            es.submit(new Namespacer(i * 10, i * 10 + 10, startLatch));
        }

        startLatch.countDown();
        System.out.println("*** DONE ***");
        es.shutdown();
    }

    private static class Namespacer implements Runnable {
        private final int min;
        private final int max;
        private final CountDownLatch startLatch;

        private Namespacer(int min, int max, CountDownLatch startLatch) {
            this.min = min;
            this.max = max;
            this.startLatch = startLatch;
        }

        public void run() {
            try {
                startLatch.await();
                for (int i = min; i < max; i++) {
                    String prefix = "p" + i;
                    String uri = "u" + i;
                    System.out.println("Getting namespace " + prefix + ":" + uri);
                    Namespace.getNamespace(prefix, uri);
                    System.out.println("Got namespace " + prefix + ":" + uri);
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    }
}


--
Eric M. Burke
http://www.linkedin.com/in/ericburke
314-494-3185 (mobile)
636-272-3298 (home)

_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/youraddr@...

 « Return to Thread: Code to reproduce threading bug