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