android synchronized 关键字用法

synchronized是java中表示同步代码快的关键字。可以放在方法修饰符前,比如private synchronized void test(){},

也可以放在方法内部,修饰某一段特定的代码。

synchronized有一个地方需要注意,就是在给普通方法加锁与给静态方法加锁机制是不一样的。

synchronized在静态方法上表示调用前要获得类的锁,而在非静态方法上表示调用此方法前要获得对象的锁。 



public class StaticSynDemo { 

private static String a="test"; 

//等同于方法print2 
public synchronized void print1(String b){ //调用前要取得StaticSynDemo实例化后对象的锁 
   System.out.println(b+a); 
} 
public void print2(String b){ 
   synchronized (this) {//取得StaticSynDemo实例化后对象的锁 
    System.out.println(b+a); 
   } 
} 
//等同于方法print4 
public synchronized static void print3(String b){//调用前要取得StaticSynDemo.class类的锁 
   System.out.println(b+a); 
} 
public static void print4(String b){ 
   synchronized (StaticSynDemo.class) { //取得StaticSynDemo.class类的锁 
    System.out.println(b+a); 
   } 




  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Android中的synchronized是一种同步机制,用于保证多个线程对同一共享资源的访问顺序和正确性。当一个线程进入synchronized代码块时,它会尝试获取锁,如果锁已经被其他线程持有,则该线程会被阻塞,直到锁被释放。只有获取到锁的线程才能执行synchronized代码块中的代码,其他线程则需要等待。这样可以避免多个线程同时访问共享资源造成的数据不一致或者竞争条件等问题。 ### 回答2: 在Android开发中,synchronized是一个关键字,用于实现对代码块或方法的同步操作。在多线程环境下,synchronized关键字确保代码的原子性和线程的安全性。 当一个方法或代码块被synchronized修饰时,它将成为互斥区域。这意味着当一个线程进入synchronized代码块时,其他线程将被阻塞,直到当前线程执行完毕并释放锁。这样,就能够保证同一时间只有一个线程能够访问被synchronized修饰的代码块,避免了多个线程同时访问共享资源导致的数据不一致等问题。 在Android开发中,常见的使用synchronized的场景有以下几种: 1. 对共享资源的读写操作:例如多个线程同时读写一个共享的数据结构,为了保证数据的一致性,需要使用synchronized关键字来同步读写操作。 2. 对共享资源的访问控制:有些时候,我们希望只有一个线程可以访问某一段代码,这时就可以使用synchronized关键字来进行线程的互斥。 3. 对并发数据结构的操作:Android中提供了一些并发数据结构,如ConcurrentHashMap和CopyOnWriteArrayList,这些数据结构已经内置了线程安全的机制,但如果对其进行多个操作的组合,仍然需要使用synchronized来保证线程的同步。 需要注意的是,synchronized关键字会带来一定的性能开销,因为它在执行时需要获取锁,并在释放锁时进行一些额外的操作。因此,在使用synchronized时,应尽量减小同步代码块的粒度,避免对不必要的代码进行同步。另外,在Android开发中,还可以使用其他的同步机制,如Lock和Condition,根据具体的需求来选择合适的同步方式。 ### 回答3: 在Android开发中,synchronized关键字用于实现线程的同步和互斥。 当一个方法或者代码块被synchronized修饰时,同一时刻只有一个线程可以执行该方法或者代码块,其他线程需要等待。 synchronized作用于方法时,锁定的是当前对象实例。 synchronized作用于静态方法时,锁定的是当前类的Class对象。 synchronized作用于代码块时,需要指定一个锁定对象,当多个线程需要访问这个代码块时,只有获得锁定对象的线程才能执行,其他线程需要等待。 在使用synchronized的过程中,需要注意以下几点: 1. 为了达到线程同步的目的,synchronized需要确保多个线程访问的是同一个共享对象。如果多个线程访问的是不同的对象实例,那么synchronized就无法实现同步。 2. 避免过多使用synchronized,因为它会导致线程的阻塞,影响程序的性能。 3. 尽量使用粒度较小的锁,减小锁的竞争范围,提高程序的并发性能。 总之,synchronized是一种常用的线程同步机制,在多线程环境下可以确保共享资源的安全访问。但是需要合理使用,避免出现死锁和性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值