我正在开发一个带线程的项目。这是我班主任的开始。
public class Main {
public static int firstIndex, secondIndex, thirdIndex, fourthIndex, fifthIndex;
然后我创建一个线程并覆盖其run()函数。在run()内部,我尝试将整数分配给我之前定义的静态整数变量。
cThread thread1 = new cThread(ant) {
@Override
public void run() {
try {
firstIndex = myAllocator.alloc(11, '1', this);
secondIndex = myAllocator.alloc(10, '2', this);
alloc()函数在内部返回正确的整数,但静态变量始终保持为0且不会更改为函数返回的值。但是,如果我不使整数静态,则会出现以下错误:
Cannot make a static reference to the non-static field firstIndex.
我确信函数返回正确的值。问题是什么?非常感谢。
答案 0 :(得分:2)
如果要从新线程中分配值,则应在读取值之前等待线程完成。
期望通过不同线程上的读取看到写入需要线程同步。将变量定义为volatile,或使用锁保护它们。
答案 1 :(得分:2)
检查以下事项:
thread1.start()
volatile
块创建静态变量run
或将您的登录包装在线程的synchronized
方法中。阅读时也需要使用同步块。这些值可能由一个Core正确设置,但不同的Core正在尝试读取它们。如果没有同步,您无法保证两个核心都能看到正确的数据。 (由于缓存等)答案 2 :(得分:0)
不要让变量变为静态; 所以你要改变你的第一行代码
public int firstIndex, secondIndex,...