当没有明确的对象作为锁,只是想让一段代码同步时,能够创建一个特别的instance变量(他得是个对象)来充当锁: 
class Foo implements Runnable 

    private byte[] lock = new byte[0];  // 特别的instance变量 
    Public void method() 

       synchronized(lock) { //… } 

//….. 

注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。 
请问,特别的instance变量起到什么作用?这个怎么同步的?来帮帮忙啊?

解决方案 »

  1.   

    表示在synchronized语句中的语句,同时只有一个线程可以进入执行,一旦有线程进入了,就会对 
    _lock对象加上同步锁,其他的线程如果来访问,就会必须等到同步锁被释放之后才会被唤醒。 
      

  2.   


    public class TestDemo {
        private byte[] lock = new byte[0];
        public synchronized void method1() {
            for (int i = 0; i < 10; i++) {
                System.out.println("method1");
                Thread.yield();
            }
        }
        public void method2() {
            synchronized (lock) {
                for (int i = 0; i < 10; i++) {
                    System.out.println("method2");
                    Thread.yield();
                }
            }
        }
        
        public static void main(String[] args){
           final TestDemo td=new TestDemo();
            new Thread(){
                public void run(){
                    td.method1();
                }
            }.start();
            td.method2();
        }}在其它对象的同步需要确保所有相关的操作都是在同一个对象上同步的。