saioAc 2017-03-18 03:33 采纳率: 0%
浏览 1001
已结题

关于java并发可见性的问题

在看书过程中,看到一个可见性的例子,结果自己运行了一下,没有可见性的问题,这是为什么,也没加同步锁啊

 public class TestThread
{
    private   boolean ready;
    private  int number;
    @Test
    public void testVisibility() throws Exception
    {
        new Thread(()->{
            System.out.println(ready+"\t"+number);
           while(!ready)
           {
               try
               {
                   Thread.sleep(1);
               } catch (InterruptedException e)
               {
                   e.printStackTrace();
               }
           }
            System.out.println(number);

        }).start();

        Thread.sleep(1000);
        number=42;
        ready=true;
       while (Thread.activeCount()>2)
       {
           Thread.yield();
       }


    }
}

结果:
false 0
42
按照书上来说,他应该一直循环下去的,结果他正常结束了.我用的java8.

  • 写回答

4条回答 默认 最新

  • 「已注销」 2017-03-18 05:10
    关注

    它进入死循环了,只不过后来main线程把ready修改成true后,new Thread()线程就退出了

    评论

报告相同问题?