为什么这个Java程序中没有竞态条件
为什么这个Java程序中没有竞态条件
我正在学习多线程,并希望编写一些存在竞态条件的代码。然而,这些代码并没有起作用:我已经运行了代码多次,但它总是打印出10,这是没有竞态条件的正确结果。有人可以告诉我为什么吗?谢谢。
以下是主函数的内容。它将创建10个线程来修改一个静态变量,并在最后打印出该变量的值。
public static void main(String[] args) { int threadNum = 10; Thread[] threads = new Thread[threadNum]; for (int i = 0; i < threadNum; i++) { threads[i] = new Thread(new Foo()); } for (Thread thread : threads) { thread.run(); } for (Thread thread : threads) { try { thread.join(); } catch (InterruptedException e) { } } // 总是打印10 System.out.println(Foo.count); }
以下是Foo类的定义:
class Foo implements Runnable { static int count; static Random rand = new Random(); void fn() { int x = Foo.count; try { Thread.sleep(rand.nextInt(100)); } catch (InterruptedException e) { } Foo.count = x + 1; } @Override public void run() { fn(); } }