日期:2014-05-20  浏览次数:20711 次

关于synchronized
想使用线程同步,以保证在同一个时刻只有一个线程能够执行某部分代码。
我使用的是同步代码块。
线程部分代码如下:
class MyThread implements Runnable{

@Override
public void run() {
// TODO Auto-generated method stub
while(true){
   synchronized (this){
   if(a>0){
           System.out.println(a+"  "+Thread.currentThread().toString());
           a--;
       }
   else break;
}
}
}
}


创建和启动线程部分代码如下:
MyThread tt=new MyThread();
Thread t1=new Thread(tt);
t1.setName("thread 1");
Thread t2=new Thread(tt);
t2.setName("thread 2");
Thread t3=new Thread(tt);
t3.setName("thread 3");
t1.start();
t2.start();
t3.start();

我的程序达到了预定效果。
但是我很郁闷,原来学的时候synchronized (this)这个地方填上任何对象都可以,但是今天调试的时候却发现只能填this ,填一个普通的对象无法达到线程同步的效果。(即输出结果里面a值有相同的!!!这可是线程同步正要解决的问题啊!!!
thread synchronized

------解决方案--------------------
private Object obj = new Object();
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while (true) {
                synchronized (obj) {
                    if (a > 0) {
                        System.out.println(a + "  " + Thread.currentThread().toString());
                        a--;
                    } else
                        break;
                }
            }

有什么问题?
------解决方案--------------------
引用:
想使用线程同步,以保证在同一个时刻只有一个线程能够执行某部分代码。
我使用的是同步代码块。
线程部分代码如下:
Java code?12345678910111213141516class MyThread implements Runnable{         @Override        public void run() {            // ……


目测没什么问题