Strange problem with simple multithreading program in Java
- by Elizabeth
Hello, I am just starting play with multithreading programming. I would like to my program show alternately character '-' and '+' but it doesn't. My task is to use synchronized keyword. As far I have:
class FunnyStringGenerator{
    private char c;
    public FunnyStringGenerator(){
        c = '-';
    }
    public synchronized char next(){
        if(c == '-'){
            c = '+';
        }
        else{
            c = '-';
        }
        return c;
    }
}
class ThreadToGenerateStr implements Runnable{
    FunnyStringGenerator gen;
    public ThreadToGenerateStr(FunnyStringGenerator fsg){
        gen = fsg;
    }
    @Override
    public void run() {
        for(int i = 0; i < 10; i++){
            System.out.print(gen.next());
        }
    }
}
public class Main{
    public static void main(String[] args) throws IOException {
        FunnyStringGenerator FSG = new FunnyStringGenerator();
        ExecutorService exec = Executors.newCachedThreadPool();
        for(int i = 0; i < 20; i++){
            exec.execute(new ThreadToGenerateStr(FSG));
        }
    }
}
EDIT: I also testing Thread.sleep in run method instead for loop.