saioAc 2017-03-18 03:33 采纳率: 33.3%
浏览 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()线程就退出了

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据