深入同步语法

1.深入synchronized关键字

 

线程间的通讯首要的方式就是对字段及其字段所引用的对象的共享访问。这种通信方式是及其高效的,但是也是导致了可能的错误:线程间相互干涉和内存一致性的问题。避免出现这两种错误的方法就是同步。

 

  • 线程间相互干扰描述了当多个线程访问共享数据时可能出现的错误。
  • 内存一致性错误描述的了共享内存可能导致的错误。
  • 同步方法(Synchronized method)描述了一种简单的可以有效防止线程间相互干扰及其内存一致性错误的方法。
  • 明锁及同步描述了一种更加通用的同步方法,以及同步是如何基于明锁而实现的。
  • 原子性描述了不能被其它线程干扰的操作。
  • Java编程语言中提供了两种基本的同步用语:同步方法和同步语句。同步语句相对而言更为复杂一些,我们将在下一小节中进行描述。本节重点讨论同步方法。  

  • 我们只需要在声明方法的时候增加关键字synchronized即可:

    [java]  view plain  copy
     
    1. public class SynchronizedCounter {  
    2.     private int c = 0;  
    3.     public synchronized void increment() {  
    4.         c++;  
    5.     }  
    6.     public synchronized void decrement() {  
    7.         c--;  
    8.     }  
    9.     public synchronized int value() {  
    10.         return c;  
    11.     }  
    12. }  

    同步语句

    另外一种创建同步代码的方式就是使用同步语句。和同步方法不同,使用同步语句是必须指明是要使用哪个对象的内部锁:

     

    [java]  view plain  copy
     
    1. public void addName(String name) {  
    2.     synchronized(this) {  
    3.         lastName = name;  
    4.         nameCount++;  
    5.     }  
    6.     nameList.add(name);  
    7. }  

转载于:https://www.cnblogs.com/minghualiyan/p/5438638.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值