1

Having problems trying to run a class method concurrently in multiple threads.

The call to myClass.thisMethodWillBeRanMultipleTimes() does not execute unless I create a copy of the object myClass when I instantiate MyRunnable.

public class MyClass {
    public MyClass() {
    }
    public Object thisMethodWillBeRanMultipleTimes() {
        Object anObject;
        ...
        // do something
        ...
        return anObject;
    }
}

public class SampleExecutorService {
    private static final int MYTHREADS = 3;

    public static void main(String args[]) throws Exception {
        MyClass myClass = new MyClass();

        ExecutorService executor = Executors.newFixedThreadPool(MYTHREADS);

        Runnable worker1 = new MyRunnable(myClass);
        executor.execute(worker1);
        Runnable worker2 = new MyRunnable(myClass);
        executor.execute(worker2);
        Runnable worker3 = new MyRunnable(myClass);
        executor.execute(worker3);
        executor.shutdown();

        // Wait until all threads are finish
        while (!executor.isTerminated()) {
        }
        System.out.println("\nFinished all threads");
    }
}

public class MyRunnable implements Runnable {
    private MyClass myClass;

    MyRunnable(MyClass myClass) {
        this.myClass = myClass;
    }

    @Override
    public void run() {
        Object someObject = myClass.thisMethodWillBeRanMultipleTimes();
    }
}
Jeremy Friesner
  • 70,199
  • 15
  • 131
  • 234
Tony
  • 31
  • 3

0 Answers0