涉及到线程同步问题,这三个词弄不明白了,高手给讲解下,举例更好。谢谢。

解决方案 »

  1.   

    synchronized 线程锁 进入这个词修饰的代码 同一时间只能有一个线程执行这段代码
    wait 将本线程放入等待池中 如果没有notify唤醒就不能重新放入等待池中执行本线程
    notify 唤醒在等待池中的线程
      

  2.   

    wait 是 object 的方法,使当前线程出于“不可运行”状态。调用 object.wait ()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 object.notify (),这样将唤醒原来等待中的线程,然后释放该锁。wait /notify 需要获取对象锁。
      

  3.   

    synchronized是同步线程,凡进入此修饰的代码,共同访问的资源就会被锁定。这个东西通常和wait和notify使用,因为wait会将线程放入线程池处于等待状态,只有通过notify唤醒。
    但wait不想sleep和suspended同是对线程等待停止执行,但是wait却可以释放同步锁。就是synchronized。
    所以通常情况下,wait用在synchronized内使用。
      

  4.   

    http://www.ticmy.com/?p=192http://www.ticmy.com/?p=219
      

  5.   

    举个例子:class A {
        int i = 0;
       synchronized void aaa(){
            i++;
       }
       synchronized void AAA(){
            i=i+2;
       }
    }class B extends Thread {
        aaa A ;
        B(aaa A){this.A = A};
        void run(){
           A.aaa();
        }
    }class C extends Thread{
        aaa A ;
        C(aaa A){this.A = A};
        void run(){
           A.AAA();
        }
    }public class D {
        main(){
         b.start();
         c.start();
       }
    }简单写了,能看懂就行。问题1:aaa中,两个方法都锁定了,是不是B或者C任意一个线程执行其中一个方法时,另一个线程就不可以执行这两个方法?只能排队等待前一个线程执行完。
    问题2:aaa中,如果其中一个方法中有wait,那么是不是当前在aaa上的线程要挂起,不再继续执行,等待其他线程执行notify?这样的话,根据前面说的,这个线程无法完成,他在执行当前方法,另一个线程在等待他执行完方法,这样是不是就死了?另,关于这三个概念,请高手不要拘泥于我这两个问题,尽可能的讲明白。
      

  6.   

    同步解决的是资源共享 上面方法加上synchorized时 当一个线程执行它时 也就获得的了其对象锁 它没有释放 其他线程当然不能执行它 
    wait和notify就是解决死锁的 不知道怎么就死了
    而且不太理解什么叫“线程无法完成” wait和notify是对同一个对象锁而言的  
    执行wait方法 线程进入暂时休眠状态 暂时释放所持对象锁 
    其他需要锁的线程就有执行的机会 
    当执行notify的时候 唤醒当前休眠线程 
    它就可以竞争当前锁 继续执行
      

  7.   

    问题1:只要任意一个线程执行了其中一个方法,就相当于上锁了,其他线程就不可以执行这个方法。但可以执行另一个方法,因为另一个方法没有上锁。
    问题2:wait会释放锁,让出cpu使用权
      

  8.   

    1、wait、notify必须在synchronized块中使用;
    2、wait 阻塞当前线程,但会释放资源锁;
    3、wait 后当前线程进入到等待队列,其他线程调用notify后当前线程进入就绪状态,获得cpu时间   后可以继续执行
      

  9.   

    synchronized是线程中的同步锁。在同步代码块和同步方法中应用
    wait()是Object中的方法,用于线程等待
    notify()也是Object中的方法,用于线程唤醒