熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java中對線程間的變量訪問也需要同步控制

2013-11-12 23:37:49  來源: Java高級技術 

  一個簡單的計數器本來以為不需要同步保護後來發現不行還是得加上程序

  public class TestMain {

  int i = ; //計數器初始值為

  public static void main(String[] args) {

  TestMain c = new TestMain();

  Worker x = new Worker(c);

  for (int i=; i<; i++) { //個線程

  new Thread(x)start();

  }

  while (true) { //每隔一秒中輸出計數器的值

  Systemoutprintln(ci);

  try {

  Threadsleep();

  } catch (InterruptedException e) {

  }

  }

  }

  }

  class Worker implements Runnable {

  TestMain c;

  public Worker(TestMain c) {

  thisc = c;

  }

  public void run() {

  try {

  Threadsleep((int)(Mathrandom() * )); //隨機Sleep一段時間

  } catch (InterruptedException e) {

  }

  ci++; //計數器自增 問題在這裡 並發寫入

  }

  }

  上面的程序%的幾率結果是其余的是

  ci++一句需要並發保護

  本來我以為Java裡面++是原子的呢呵呵

  解決方法加上同步控制或者使用JDK裡面新增加的AtomicInteger類


From:http://tw.wingwit.com/Article/program/Java/gj/201311/11157.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.