高并发-线程安全处理(1)-可变整数类之代码详解

在处理线程安全时,首先需要引进  annotations 包

我们在说线程安全其实本质就是变量的原子性发生的状态变化,在任何系统,变量无处不在,因此,面对高并发多线程的业务代码处理就特别注意线程安全,也是我们很多程序员容易忽略的地方

1》 常规非安全写法

public class UnSynchronizedInteger {
    private int value;
    public synchronized int get() {
        return value;
    }
    public synchronized void set(int value) {
        this.value = value;
    }
}

点评:这样的写法,针对单线程还可以说的过去,但现实场景特别是核心业务代码时,不可能不涉及到高并发下的多线程处理,在这种情况下,value值是可能被丢失的和失效的(这种故障不会在常规的测试中出现,等出现了也很难找到故障所在)。

2》  线程安全正确的写法:

@ThreadSafe
public class SynchronizedInteger {
    @GuardedBy("this") private int value;

    public synchronized int get() {
        return value;
    }
    public synchronized void set(int value) {
        this.value = value;
    }
}

时间: 2024-11-02 04:08:05

高并发-线程安全处理(1)-可变整数类之代码详解的相关文章

C语言实现大整数加减运算详解_C 语言

前言     我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234+5678,这样的数值并没有超出计算机的表示范围,所以可以运算.但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为100万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数.这样计算机将无法对其进行直接计算.     可

Android开发笔记之:用Enum(枚举类型)取代整数集的应用详解_Android

在Android的API中可以发现有很多用整数集来作为参数的地方,先来看一下实例.LinearLayout是大家所熟知的一个UI基本元素,它里面有一个方向的属性,可以通过以下方法来设置: 复制代码 代码如下: LinearLayout.setOrientation(int); 使用的时候,通常都是这样: 复制代码 代码如下: LinearLayout.setOrientation(LinearLayout.HORIZONTAL);LinearLayout.setOrientation(Linea

手游灌篮高手高星级卡牌怎么得 高品质卡牌获取途径详解

在灌篮高手手游中获取卡牌的途径各种各样,不知道大家知不知道灌篮高手手游高效低耗卡牌的获取途径呢?接下来小编就来和大家分析下灌篮高手手游高效低耗卡牌获取途径....... 灌篮高手卡牌除了抽卡刷本以外,还有一个特殊的途径可以获取,那就是神秘商店!神秘商店是一个每隔2个小时自动刷新商品列表的商店,商店中经常出售一些高星级卡牌.卡牌碎片还有装备等等,不过你需要支付钻石或者SD点数才能购买(SD点数可以通过分解5星以上卡牌获得).

PHP的可变变量名使用方法详解

有时候可变的变量名会给编程带来很大的方便.也就是说变量名可以被动态的命名和使用.通常变量通过下面这样的语句来命名 :  代码如下 复制代码     <?php     $a = 'hello';     ?> 可变变量名指的是使用一个变量的值作为这个变量的名称.在上面的例子中,通过使用两个$符号,你可以把hello设置成一个变量的名称,就像下面那样.  代码如下 复制代码     <?php     $$a = 'world';     ?> 通过上面的两个语句,有两个变量被定义:

Android开发笔记之:用Enum(枚举类型)取代整数集的应用详解

在Android的API中可以发现有很多用整数集来作为参数的地方,先来看一下实例. LinearLayout是大家所熟知的一个UI基本元素,它里面有一个方向的属性,可以通过以下方法来设置: 复制代码 代码如下: LinearLayout.setOrientation(int); 使用的时候,通常都是这样: 复制代码 代码如下: LinearLayout.setOrientation(LinearLayout.HORIZONTAL); LinearLayout.setOrientation(Lin

java-并发-高并发概述

多线程基础 为什么需要并行 有关并行的重要概念 有关并行性能的2个重要定律 多线程基础 线程的基本操作 守护线程 优先级 中断处理 基本的线程同步操作 Java内存模型和线程安全 原子性 可见性 有序性 Happen-Before 规则 线程安全的概念 线程安全的反例 JDK并发包 各种同步控制工具的使用 并发容器及典型源码分析 同步工具.并发容器使用小案例 第5课:JDK并发包 线程池的基本使用 扩展和增强线程池 线程池及其核心代码分析 ForkJoin 并发设计模式 单例 不变模式 生产者消

Java 高并发四:无锁详细介绍_java

在[高并发Java 一] 前言中已经提到了无锁的概念,由于在jdk源码中有大量的无锁应用,所以在这里介绍下无锁. 1 无锁类的原理详解 1.1 CAS CAS算法的过程是这样:它包含3个参数CAS(V,E,N).V表示要更新的变量,E表示预期值,N表示新值.仅当V 值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么 都不做.最后,CAS返回当前V的真实值.CAS操作是抱着乐观的态度进行的,它总是认为自己可以成功完成 操作.当多个线程同时使用CAS操

缓存+HASH=高并发?你把高并发架构想得太简单!

[51CTO.com原创稿件]在互联网时代,高并发与高可用一样,已经变成系统的标配了,如果系统每秒查询率(QPS)没有上万,都不好意思跟人打招呼(虽然实际每天调用量不超过100).尤其在双十一期间,电商们凭借着藐视全球的流量,热心地分享自己的技术架构,几乎千篇一律地用缓存+哈希(HASH),仿佛这就是高并发的核心技术了.当然,如果你信了,那就离坑不远了. 缓存+哈希=高并发? 所谓知己知彼百战不殆,先来看看我们经常看到的高并发技术是什么. 资源静态化  活动秒杀页面是标准的高并发场景,活动期间单

详解Android中用于线程处理的AsyncTask类的用法及源码_Android

为什么要用AsyncTask我们写App都有一个原则,主线程不能够运行需要占用大量CPU时间片的任务,如大量复杂的浮点运算,较大的磁盘IO操作,网络socket等,这些都会导致我们的主线程对用户的响应变得迟钝,甚至ANR,这些会使应用的用户体验变差,但是有时又的确需要执行这些耗时的任务,那么我们通常可以使用AsyncTask或者new Thread 来处理,这样把任务放入工作线程中执行,不会占用主线程的时间片,所以主线程会及时响应用户的操作,如果使用new Thread来执行任务,那么如果需要中