class A{
synchronized void method(){}
}main方法类{
start一些线程;
A a;
a.method();//!!!问题1:当cpu运行主线程到这里的时候,必须把a.method运//行完才有可能运行其他线程,对不对?
//!!!问题2:这个作用是起到该方法顺利运行不受多线程干扰导致混乱,对不//对?
//!!!问题3:这个运用synchronized的机制为什么叫线程同步?我觉得应该//叫防止多线程同步才对吧
}

解决方案 »

  1.   

    1)只是 method申明成了synchronized 就是说不能同时有多个线程调用a.method(),一些不调用a.method()的线程可以运行,不需要等
    2)这个,这个,也可以这么说吧.应该是避免多个线程同时调用a.method(),什么干扰不干扰的就得看method里面到底执行了什么.
    3)这个问题很难回答.
      

  2.   

    这个同步是非static的,所以只对当前的一个A的实例 a有效。也就是说,如果多个线程要同时访问这个method,那么必须等待。当然,这个 a里面的所有的synchronized的方法都是一样的,他们共用了同一个实例(就是a)锁。
      

  3.   

    问题3:这个运用synchronized的机制为什么叫线程同步?我觉得应该//叫防止多线程同步才对吧
    线程同步是相对于线程并发而言的
    这些概念性的东西书上都有
      

  4.   

    1.错误。method这个方法以外的线程还是可以执行的
    2.对
    3.和你一起学习。
      

  5.   

    对于第一个问题:  当你的其中一个线程调用synchronized void method(){} 时,其他线程依旧是可以执行的,只是无法执行method()方法,因为这个方法被锁住了,除了被锁定方法以外的任何方法,其他线程也是可以访问的。
     对于第二个问题:  当你的一个线程执行method()方法时,这个方法只能被这个线程访问,其他线程无权访问(只有等这个线程访问后才能访问),这样做就是为了保证method方法中的数据保持一致性。如果不用sychroized限制,当一个线程访问的时候,其他线程可以会造成数据篡改。 所以这个作用是起到该方法顺利运行不受多线程干扰导致混乱。
    对于第三个问题,这个叫做线程同步,是指代数据的同步。
      

  6.   

    如果不加static的话,指的是不能有多个线程同时执行同一个实例方法,如果是多个实例的话仍然可以执行。
      

  7.   


    1)程序仍然可以继续运行
    2)用synchronized声明的方法表示执行到该方法时获取当前对象(本例中是a)的锁,其它该对象用synchronized声明的方法就阻塞了只有拿到当前对象的锁后才可以继续执行。