无法为静态整数赋值

时间:2014-12-31 12:57:14

标签: java eclipse multithreading static

我正在开发一个带线程的项目。这是我班主任的开始。

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.

我确信函数返回正确的值。问题是什么?非常感谢。

3 个答案:

答案 0 :(得分:2)

  1. 如果要从新线程中分配值,则应在读取值之前等待线程完成。

  2. 期望通过不同线程上的读取看到写入需要线程同步。将变量定义为volatile,或使用锁保护它们。

答案 1 :(得分:2)

检查以下事项:

  • 您正在运行该线程。 thread1.start()
  • 在线程完成后检查静态变量。在线程的所有目的是并行运行之后,您可能会在线程有机会运行之前检查值。
  • 您需要同步。使用volatile块创建静态变量run或将您的登录包装在线程的synchronized方法中。阅读时也需要使用同步块。这些值可能由一个Core正确设置,但不同的Core正在尝试读取它们。如果没有同步,您无法保证两个核心都能看到正确的数据。 (由于缓存等)

答案 2 :(得分:0)

不要让变量变为静态; 所以你要改变你的第一行代码

public int firstIndex, secondIndex,...