jeudi 9 juillet 2015

Condition Check fails in run() of a Thread

public class MultiThreadExample extends Thread {
    public static int count=0;
    static String s="";
    synchronized public static String read(){
        String line="";
        System.out.println("Enter new line:");
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        try {
            line=br.readLine();
            count++;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return line;

    }

    synchronized public static void write(String line){
        try {
            BufferedWriter br=new BufferedWriter(new FileWriter("C://name.txt"));
            br.write(line);
            System.out.println(line);
            br.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

    public void run(){
        if(count==0){
            System.out.println("Read " + s + " Count " + count);
            s=read();
            System.out.println("Read " + s + " Count " + count);
        }
        else{
            write(s);
            System.out.println("Write" + s + " Count " + count);
        }
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MultiThreadExample th1=new MultiThreadExample();
        MultiThreadExample th2=new MultiThreadExample();
        th1.start();
        th2.start();
    }

}

The count check in run() method is not working. Any idea why? The count increases with each call, I can see, but the check is not working, and each time the control passes to read() method, and does not go to write()

What am I doing wrong? Also, is there any other efficient way to call multiple methods from a two threads, depending on situation?

P.S. I am trying to read input using one thread, and write the input value to a file in another thread

Aucun commentaire:

Enregistrer un commentaire