<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    On 23/09/2024 06:42, Adam Sotona wrote:<br>
    <blockquote type="cite" cite="mid:DS0PR10MB6847EE2D14175ADEBDE4404F8C6F2@DS0PR10MB6847.namprd10.prod.outlook.com">
      
      <meta name="Generator" content="Microsoft Word 15 (filtered medium)">
      <style>@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.0pt;
        mso-ligatures:none;}div.WordSection1
        {page:WordSection1;}</style>
      <div class="WordSection1">
        <p class="MsoNormal">Hi,</p>
        <p class="MsoNormal">I’m updating my classroom examples to run
          on JDK 23 and with IO.println I experience different behavior
          than with System.out.println. Following example explains the
          issue.</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Thank you,</p>
        <p class="MsoNormal">Adam</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">static</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
          </span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">void</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
            <b><i>doSomething</i></b>() {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
          </span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">try</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
            {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">       
            Thread.<i>sleep</i>(1000);<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
            }
          </span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">catch</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
            (InterruptedException ignore) {}<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">}<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none"><o:p> </o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">void</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
            <b>main</b>() {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
            Thread.<i>ofVirtual</i>().start(() -> {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">       
          </span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">while</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
            (</span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">true</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">)
            {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">           
            <i>doSomething</i>();<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">           
            System.</span><i><span style="font-size:9.0pt;font-family:"Courier New";color:#CE54B8;mso-ligatures:none">out</span></i><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">.println(</span><span style="font-size:9.0pt;font-family:"Courier New";color:#1E9347;mso-ligatures:none">"I
            do something until you press Enter"</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">);<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">       
            }<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
            });<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
            Thread.<i>ofVirtual</i>().start(() -> {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">       
          </span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">while</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">
            (</span><span style="font-size:9.0pt;font-family:"Courier New";color:#336BDD;mso-ligatures:none">true</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">)
            {<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">           
            <i>doSomething</i>();<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">           
            <i>println</i>(</span><span style="font-size:9.0pt;font-family:"Courier New";color:#1E9347;mso-ligatures:none">"I'm
            blocked until you press Enter"</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">);<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">       
            }<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
            });<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">   
            <i>readln</i>(</span><span style="font-size:9.0pt;font-family:"Courier New";color:#1E9347;mso-ligatures:none">""</span><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">);<o:p></o:p></span></p>
        <p class="MsoNormal" style="background:white"><span style="font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none">}<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:12.0pt;mso-ligatures:none"><o:p> </o:p></span></p>
      </div>
    </blockquote>
    IO uses Console which has its own read + write locks to coordinate
    input and output from concurrent threads. The readln is both output
    (for the prompt) and input and it seems to hold both locks when
    waiting for input.   System.out has its own route to print the
    output, doesn't coordinate with Console, so isn't locked out by
    readln(prompt). It's always been possible to mix Console and
    System.in/out, but maybe time to re-examine to avoid puzzlers when
    mixing uses of the new textual I/O methods with code copied from a
    book or online resource that uses System.out.<br>
    <br>
    -Alan<br>
  </body>
</html>