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

来源:互联网 发布:之前没cos过知乎 编辑:程序博客网 时间:2024/05/18 02:26

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)同步代码块的访问将被阻塞。所以打印出来的结果是有序的。


0 0
原创粉丝点击