关于java线程同步的

来源:百度知道 编辑:UC知道 时间:2024/05/06 14:54:11
以下代码为什么没有线程同步啊,请帮忙指出来
package com.softeem.j2se.lesson3.homework;

import javax.naming.ldap.StartTlsRequest;

public class SendNum extends Thread {
private int number = 0;

public void run() {
while (number < 100) {
synchronized (this) {
try {
Thread.sleep(30);
number++;
System.out.println(currentThread().getName() + "-->"
+ number);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
}

}

1、把 synchronized (this) { 移到 while 外面就可以了。

2、如果用的JDK5以上的版本,可以去掉 synchronized 块,把 private int number = 0;
改成 private volatile int number = 0; 就可以了。

while (number < 100) { // 判断中用到了number

在方法上加synchronized