随笔 - 0, 文章 - 264, 评论 - 170, 引用 - 0
数据加载中……

synchronized(this) 解释

public class DemoThread implements Runnable {
   
public void run() {
        synchronized(this) {            //请问这里的this怎样理解,t1和t2的地址不是不一样嘛,怎么会只有一个线程运行???
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() 
+ " synchronized loop " + i); 
            }
         }
    }

    public static void main(String[] args) {
        DemoThread t1 
= new DemoThread();
        Thread ta 
= new Thread(t1, "A");
        Thread tb 
= new Thread(t1, "B");
        ta.start();
        tb.start(); 
    }
}


    解释:
这里的this是指当前对象,也就是说不管ta还是tb,刚开始运行这段代码的时候会给这段代码加个锁,这样即使运行到中间被替换了,
另一个线程也不会执行这段代码,因为这段代码加锁了,而钥匙在给代码加锁的那个线程手里,只有加锁的线程运行完这段代码,才会给代码解锁.
然后其他线程才能执行这段代码.. 加个synchronized(this)以后运行结果是这样:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4

不加的话是这样:(顺序乱了,有好多种结果,这里只是其中一种)..
A synchronized loop 0
B synchronized loop 0
A synchronized loop 1
B synchronized loop 1
A synchronized loop 2
B synchronized loop 2
A synchronized loop 3
B synchronized loop 3
B synchronized loop 4
A synchronized loop 4




       

posted on 2012-09-27 16:03 小一败涂地 阅读(2019) 评论(0)  编辑  收藏 所属分类: 并发、多线程java语言相关


只有注册用户登录后才能发表评论。


网站导航: