各位大神~跪求~线程中同步锁的问题~(同步代码块)
我的代码是:
package thread;
class qi implements Runnable{
private static int num=100;
Object oj=new Object();
public void run() {
while(true){
synchronized(oj){
if(num>0){//try{Thread.sleep(10);}catch(Exception e ){}
System.out.println(Thread.currentThread().getName()+"sale_number"+num--)
}
}
}
}
}
public class ThreadDemo7 {
public static void main(String[] args)
{
qi q=new qi();
qi q1=new qi();
qi q2=new qi();
Thread t3=new Thread(q2);
Thread t1=new Thread(q);
Thread t2=new Thread(q1);
t1.start();t2.start();t3.start();
}
}
为什么到最后的运算结果不是从0到100的 但是加上了 sleep就是达到了从0到100 同步锁本来不是就是解决线程运行先后顺序的问题吗?为什么 还是会出错捏??
------解决方案--------------------你3个线程用的不是一把锁,当然控制不了了啊.
把
Object oj=new Object();
改成
public static Object oj=new Object();
------解决方案--------------------qi q=new qi();
qi q1=new qi();
qi q2=new qi();
Thread t3=new Thread(q2);
Thread t1=new Thread(q);
Thread t2=new Thread(q1);
你这里创建了三个qi 对像,synchronized锁住的是同一个对像(不是三个对像).要想解决这个问题,就像一楼说的,
public static Object oj=new Object(); oj设置为静态的。