读书人

Synchronized块同步方法中this跟class

发布时间: 2013-02-19 11:11:40 作者: rapoo

Synchronized块同步方法中this和class对象
public class Test{public static void main(String[] args){MyThread m = new MyThread("liming");MyThread m1 = new MyThread("yaotian");Thread t = new Thread(m);Thread t1 = new Thread(m1); t.start(); t1.start();}} class MyThread implements Runnable{ private String name; public MyThread(String name){ this.name=name; } public void run() {add(name);}public void add(String name){synchronized (MyThread.class) { name = "this->"+name; System.out.println(Thread.currentThread()+"name:"+name); delete(name);}}public synchronized void delete(String name){name = "delete-->"+name;System.out.println(Thread.currentThread()+name);}}

?在synchronized同步块中使用了MyThread.class对象作为监视器,并且生成了m,m1对MyThread引用对象,创建了两个线程t,t1来分别访问m,m1,最后得到的结果是:(这个结果是符合预期的结果,线程执行的顺序是先执行add后执行delete)

Thread[Thread-0,5,main]name:this->liming
Thread[Thread-0,5,main]delete-->this->liming
Thread[Thread-1,5,main]name:this->yaotian
Thread[Thread-1,5,main]delete-->this->yaotian

-----------------------------
Thread[Thread-1,5,main]name:this->yaotian
Thread[Thread-1,5,main]delete-->this->yaotian

Thread[Thread-0,5,main]name:this->liming
Thread[Thread-0,5,main]delete-->this->liming

如果我们将add中的同步监视器改为this结果是方法不同步

Thread[Thread-0,5,main]name:this->liming
Thread[Thread-1,5,main]name:this->yaotian
Thread[Thread-0,5,main]delete-->this->liming
Thread[Thread-1,5,main]delete-->this->yaotian

读书人网 >编程

热点推荐