关于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;
}
}
有什么问题?
------解决方案--------------------
目测没什么问题