Android 里面synchronized(this)的作用分析

1、Synchronzied关键字的作用就是:线程同步。它可以用来修改对象中的方法,将对象加锁。意思是不管哪一个线程A每次运行到这个方法时,都要检查有没有其它正在用这个方法的线程B(或者F等),如果有的话,需要等正在使用这个方法的线程B(或者F)运行完这个方法后再运行此线程A,没有的话,直接运行。

2、先来看下面这个例子,没有加入synchronized(this) 的情况下的运行结果。

新建一个synchronized_test.java文件,代码如下:


public class synchronized_test implements Runnable {
public void run() 
{
//synchronized(this) 
{
	int i = 0;
      for (i = 0; i < 6; i++) 
     {
          System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);
	 try {
                Thread.sleep(5);
             } catch (InterruptedException ie) {
}
     }
}
}
public static void main(String[] args) {
synchronized_test C1 = new synchronized_test();
Thread Tc = new Thread(C1, "thread No1");
Thread Td = new Thread(C1, "thread No2");
Tc.start();
Td.start();
}
}

运行的结果如下:



从打印的结果看了,当一个线程Tc访问object的一个synchronized(this)同步代码块时,另一个线程Td仍然可以访问该object中的非synchronized(this)同步代码块,所以打印出来的结果显然不是我们想要的按顺序的结果。

3、把上面代码里面的synchronized(this) 这一行打开,我们再来看一下运行结果。


当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。所以打印出来的结果是有序的。


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值