标题: java同步代码块问题 [打印本页] 作者: 史卜坤 时间: 2012-6-29 08:26 标题: java同步代码块问题 public class A implements Runnable {
public static void main(String[] args) {
A a = new A();
Thread t1 = new Thread(a);
Thread t2 = new Thread(a);
Thread t3 = new Thread(a);
t1.start();
t2.start();
t3.start();
}
Integer i = 100;
//Object o = new Object();
public void run() {
while (true)
{
synchronized (i) {
if (i>0)
{
try {
Thread.sleep(20);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" == "+i--);
}
}
}
}
}
刚看错了... Integer i = 100;
没看到你的是 Integer i = 100;
没问题呀 作者: 常佳杰 时间: 2012-6-29 08:51
我给你分析为什么不能同步的原因吧..
public class A implements Runnable {
public static void main(String[] args) {
A a = new A();
Thread t1 = new Thread(a);
Thread t2 = new Thread(a);
Thread t3 = new Thread(a);
t1.start();
t2.start();
t3.start();
}
Integer i = 100;
//Object o = new Object();
public void run() {
while (true)
{
synchronized (i) {//就比如一线程进去了这儿锁的是1,但这个线程挂在try语句里边了,那么另一个二线程就有可能进去,等一线程醒来去执行i--,二线程可能不执行try就直接去i--了,导致出现-1..
if (i>0)
{
try {
Thread.sleep(20);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" == "+i--);//另外这个语句要放在finally语句里边....要不会出现线程问题..