1.为方法加上synchronized的时候,锁的是方法还是其数据?有的书说synchronized是配在对象上的,这点不是很懂。
2.关于线程,我可以唤醒特定的线程吗?如果一个程序开了不同的线程对该数据进行操作,在系统的调动下我们不知道其位置那不是很乱吗?如果不用足够长的sleep方法好像很难为线程排序哦,求教。

解决方案 »

  1.   

    synchronized 锁上方法也就锁上了方法中的数据, 当然一个对象也可以加上synchronized 关键字
      

  2.   

    为方法加上synchronized的时候,锁的是方法如果不用足够长的sleep方法好像很难为线程排序哦wait,notify    用锁来控制
      

  3.   

    synchronized 可以锁对象,也可以锁方法,要看你里面是什么参数
      

  4.   

    1.synchronized 锁上方法,本质上还是锁的方法的对象
    2.不能唤醒特定线程,使用yield方法,会告诉系统唤醒其他线程,但是不能告诉系统具体唤醒某一个线程,只能由系统自动分配.不过可以通过程序设置标志的方法,实现特定线程的唤醒
      

  5.   

    (1)方法加上synchronized,
    如果是非static方法,等价于:synchronized(this)
    如果是static方法,等价于:synchronized(类名.class)//比如非static:
    public synchronized void add(Object elem){
       .............
    }
    等价于:
    public void add(Object elem){
      synchronized(this){
         .............
      }
    }
    //static
    public class XXX{
       public static synchronized void add(Object elem){
          ............
       }
    }
    等价于:
    public class XXX{
       public static void add(Object elem){
           synchronized(XXX.class){
                 ............
           }
       }
    }
      

  6.   

    为线程排序是很难的,或者说不能做到,你不能控制线程的执行顺序。
    synchronized 必须有一个对象与之关联,锁住一个对象,然后进入代码段,出了代码段,释放锁,然后别人要进入代码段,就必须先获得锁,如果别人没释放那么就进不去。