::Z::Thinking::

::Simple::
文章 - 124,收藏 - , 评论 - 49, trackbacks - 0

1,一个类里面的所有的synchronized的方法,当有多个线程对这些方法执行的话,首先要获得这个对象的锁,才能执行那个synchronized的方法。比如下面,t1执行methodOne()的时候,t2对这个对象要等待,直到t1执行完methodOne()放出这个对象的锁。然后t2才能执行methodTwo(),其间,t2一直被block.

2,wait(),notifyAll()/notify(),必须在同一个锁的内部执行。不然会有竞赛情形出现(见csdn合定本)

所以在一个类的内部分别出现this.wait(),this.notify()是可以的(都在一个对象锁下)。或者在一个synchronized(object)内部也可以。


public class MyClass{

   public synchronized methodOne(){...}

   public synchronized methodTwo(){...}

  ... 

    public Thread t1=new Thread(new Runnable(){

           public void run(){

                this.methodOne();

           }

      }

   );

    public Thread t2=new Thread(new Runnable(){

           public void run(){

                this.methodTwo();

           }

      }

   );

}



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=453033


[点击此处收藏本文]  发表于2005年07月03日 10:21 PM




正在读取评论……