Android学习 (七)synchronized(一)(转)

转载 2012年03月29日 14:27:59

转自: http://hi.baidu.com/fenghuang1207/blog/item/06a17dce8534ff1d93457e21.html


  synchronized:Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

    一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

    二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

    三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。

    四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。

    五、以上规则对其它对象锁同样适用.

举例说明:  
    一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

package ths;

public class Thread1 implements Runnable{  
    public void run() {  
         synchronized(this) {  
              for (int i = 0; i < 5; i++){  
                   System.out.println(Thread.currentThread().getName() + "synchronized loop " +i);  
              }  
         }  
    }  
    public static void main(String[] args){  
         Thread1 t1 = newThread1();  
         Thread ta = new Thread(t1,"A");  
         Thread tb = new Thread(t1,"B");  
         ta.start();  
         tb.start();  
    } 
}

结果:  
    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

    二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

package ths;

public class Thread2{  
    public void m4t1() {  
         synchronized(this) {  
              int i = 5;  
              while( i-- > 0){  
                   System.out.println(Thread.currentThread().getName() + " : " +i);  
                   try {  
                        Thread.sleep(500);  
                   } catch (InterruptedException ie){  
                   }  
              }  
         }  
    }  
    public void m4t2() {  
         int i = 5;  
         while( i-- > 0){  
              System.out.println(Thread.currentThread().getName() + " : " +i);  
              try { 

Android应用开发中草率使用synchronized同步关键字的隐患

Android应用中,对于很多类似XXXManager的业务逻辑类,很多都用单例模式。好处很多,比如保持数据的原子性和一致性。同时,往往存在主线程和各种工作线程,需要保证单例中的很多业务逻辑达到线程安...
  • aliankg
  • aliankg
  • 2016年01月26日 12:32
  • 930

Java练级打怪路--synchronized对比cas

原创 沙茶敏碎碎念 2016-11-27 21:56 前言 这篇文章的营养非常有限,只是一个夜黑风高的晚上,突发奇想,如果我要统计一个网站的PV,程序应该怎么写呢? 一种挫逼的写法 ...
  • u011277123
  • u011277123
  • 2016年11月30日 09:28
  • 838

Android开发之--上传图片到七牛云存储

前段时间做个人中心页面时,添加了头像上传功能,当时使用的是七牛的云存储,个人感觉还不错。所以就总结一下Android使用七牛云存储的图片上传,具体的图片选择过程可参见我的另一篇文章Android之图片...
  • Angel_jn
  • Angel_jn
  • 2017年05月25日 10:21
  • 564

Android并发编程之如何使用ReentrantReadWriteLock替代synchronized来提高程序的效率

Java的synchronized关键字可以帮助我们解决多线程并发的问题,比如我们有一个公共资源,多个线程都来操作这个公共的资源,就会出现并发的问题,比如不同的线程对同一个数据同时进行读和写,肯定会使...
  • nugongahou110
  • nugongahou110
  • 2015年12月16日 14:46
  • 1728

七牛-转码m3u8并且生成pm3u8

import java.io.IOException; import com.qiniu.common.QiniuException; import com.qiniu.http.Response; ...
  • dlj949611520
  • dlj949611520
  • 2016年08月10日 18:55
  • 1344

android七牛多张图片上传

将多张图片上传到七牛,需要一张张上传 七牛android SDK使用指南http://developer.qiniu.com/code/v7/sdk/android.html 将图片上传到七牛服务...
  • u010694658
  • u010694658
  • 2016年04月18日 10:54
  • 5130

七牛云ajax上传图片(MultipartFile 转file)

前台代码: 用了ajaxfileupload.js插件(https://github.com/search?utf8=%E2%9C%93&q=ajaxfileupload.js) ...
  • lglglgl
  • lglglgl
  • 2017年01月08日 20:08
  • 1796

Android如何将图片上传到七牛云存储

前段时间做个人中心页面时,添加了头像上传功能,当时使用的是七牛的云存储,个人感觉还不错。所以就总结一下Android使用七牛云存储的图片上传,具体的图片上传过程可参见另一篇文章,今天我们重点要说的是七...
  • jhg1204
  • jhg1204
  • 2016年05月16日 19:09
  • 4585

Java简单锁机制,synchronized死锁并解决

下面例子有一定概率deadLockimport com.sun.org.apache.regexp.internal.RE;/** * Created by butter on 16/11/15. ...
  • Dextrad_ihacker
  • Dextrad_ihacker
  • 2016年11月17日 14:11
  • 1774

Dubbo的学习与总结(二)- -使用Dubbo

在上一篇中,我们对Dubbo有了一个大概的认识,现在我们来说如何使用。 Dubbo是一个面向服务的治理方案,那首先我们要有服务,还要定义出服务之间的规范,说到规范,我们就想到了Java中的接口,接口的...
  • lf_214
  • lf_214
  • 2016年03月28日 15:42
  • 613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android学习 (七)synchronized(一)(转)
举报原因:
原因补充:

(最多只允许输入30个字)