2016-05-27 5 views
0

Hier ist der Code:Ist es sicher, von StdIn zu lesen und gleichzeitig in StdOut zu schreiben?

public static void main(String[] args) throws InterruptedException { 
    Thread t = new Thread(new Runnable() { 
     public void run() { 
      while(true){ 
       BufferedReader buffer=new BufferedReader(new InputStreamReader(System.in)); 
       try { 
        System.out.println(buffer.readLine()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    t.start(); 
    while(true){ 
     System.out.println("Text"); 
     Thread.sleep(1000); 
    } 
} 

ich nicht ganz sicher bin, ob es so zu tun, tatsächlich sicher ist. Kann es in einem solchen Code zu einem Cucnurrency Bug kommen? Ich habe ein paar Tests durchgeführt und es funktioniert ganz gut, aber wer weiß, wie es sich nach 1000000 Versuchen verhält ...

+0

Ja, alle Druck Anrufe an den Druckstrom synchronisiert werden. – Veeram

Antwort

1

Ja, es ist sicher. Wenn Sie println bei der Umsetzung anschauen, werden Sie sehen, dass der Code synchronized ist:

public void println(String x) { 
    synchronized (this) { 
     print(x); 
     newLine(); 
    } 
} 
Verwandte Themen