.解决办法:
1、不在线程之间共享该状态变量(可将变量封装到方法中).
2、将状态变量修改为不可变的常量(final).
3、访问状态变量时使用同步.
4、使用原子变量类....于是可以定义线程安全性:
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的...线程同步
线程同步其核心就在于一个“同”.所谓“同”就是协同、协助、配合,“同步”就是协同步调,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”....如果某个操作可以分割,那么该操作就不具备原子性,例如i++.非原子操作都存在线程安全问题,这个时候我们需要使用同步机制来保证这些操作变成原子操作,来确保线程安全....number = 42;
ready = true;
}
}
主,读线程都将访问共享变量ready和number.虽然看起来会输出42,但事实上很有可能输出0,或者根本无法终止.这是因为代码中没有用足够的同步机制