读书人

多线程的同步有关问题 2

发布时间: 2011-12-29 22:09:38 作者: rapoo

多线程的同步问题 2

Java code
public class Test3 {    public static void main(String[] args) {        computer3 t = new computer3();        new Thread(t).start();        new Thread(t).start();        new Thread(t).start();    }}class computer3 extends Thread {    int i = 10;    static Object obj = new Object();    public void print() {        System.out.println(Thread.currentThread().getName() + ":" + i);        i--;    }    public void run() {        while (i > 0) {            synchronized (obj) {                print();            }            try {                sleep(100);            } catch (Exception e) {            }        }    }}


程序如上,问题是,正常情况i只会显示到1的,但是多运行几次,会出现i为0,甚至是-1的情况,不知道是怎么回事?

[解决办法]
while (i > 0) {
synchronized (obj) {
改成
Java code
  while (i > 0) {            synchronized (obj) {    if(i>0){ // 加上这个if吧,后面别忘了加上} 

读书人网 >J2SE开发

热点推荐