AtomicStampedReference AtomicReference解决CAS机制中ABA问题 AtomicStampedReference AtomicStampedReference它内部不仅维护了对象值,还维护了一个版本号(可以是任何一个整数,它使用整数来表示状态值).当AtomicStampedReference对应的数值被修改时,除了更新数据本身外,还必须要更新版本号.因此只要版本号发生变化,就能防止不恰当的写入.版本号类似于时间戳. import java.util.conc…
基于CAS分析对ABA问题的一点思考 什么是CAS? 背景 synchronized加锁消耗太大 volatile只保证可见性,不保证原子性 基础 用CPU提供的特殊指令,可以: 自动更新共享数据; 能检测到是否有其他线程的干扰; CAS(Compare and Swap) 不加锁而是尝试去完成替换(写)操作,如果失败就重试,直到成功; 分析 // AtomicInteger public class AtomicInteger extends Number implements java.io…
Java 反射机制中 getMethod()和getDeclaredField()区别 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类方法时,发生NoSuchMethodException异常,后来上网发现getMethod()调用公共方法,不能反射调用私有方法,后来找到getDeclaredField()能够访问本类中定义的所有方法.后来用这个方法解决了我遇到的问题.我查了java api文档,其中详细说明如下: Method…
解决服务器复制中SID冲突问题 如果你有多部的主机需要安装,最快的方法是什么?想必就是用像GHOST之类的软件来进行硬盘的复制.当然,如果是安装在虚拟机之中,则需要复制虚拟的硬盘档案即可,以微软的VPC为例(方法同样适用于Vmware虚拟机),文件扩展名是*.VHD,不过由于Windows的系统在完成安装之后,都会有各自唯一的安全识别码(SID),什么是SID呢?他就是安全标识符 (SID) ,他是长度可变的唯一值,用来标识 Windows 操作系统中的安全主体或安全组.下面我们先用PStool…
1.MTR(mini-transaction) 在MySQL的 InnoDB日志管理机制中,有一个很重要的概念就是MTR.MTR是InnoDB存储擎中一个很重要的用来保证物理写的完整性和持久性的机制. 先看下MTR在MysQL架构中的位置. MTR是上面的逻辑层与下面物理层的交互窗口,同时也是用来保证下层物理数据正确性.完整性及持久性的机制. 2.日志刷盘的触发条件 触发条件 描述 时间 线程默认每秒刷新一次. 空间 Log Buffer空间用完了 Check Point checkPoint的…
SPI机制中的SPI实现类的读取和预处理是由ExtensionLoader类的loadFile方法来完成的 loadFile方法的作用是读取dubbo的某个SPI接口的spi描述文件,然后进行缓存,缓存,缓存(很重要,说三遍) ,读取的位置是在jar包下的META-INF\dubbo\internal目录下  一. 先对loadFile方法进行下粗的了解: loadFile方法方法被调用的顺序如下: getExtensionClasses() ——> loadExtensionClasses()…
1.java语言使用Thread类及其子类对象来表示线程,新建的一个线程声明周期中经历 新建.(声明一个线程,此时他已经有了相应的内存空间和其他资源),运行(线程创建之久就据用了运行的条件,一旦轮到使用CPU,此线程就会脱离创建他的主线程开始自己使命.此线程调用start()方法.通知JVM,这样JVM就会知道一个新的线程排队等候了.子类线程中必须重写Thread父类中的run方法,不然会发生异常.).线中断机制,就是此线程使用Thread中的方法 sleep(int millsecond)此时…
Linux内存管理机制中buffer和cache的区别理解linux内存管理,需要深入了解linux内存的各个参数含义和规则,下面介绍一下Linux操作系统中内存buffer和cache的区别. Freefree 命令相对于top 提供了更简洁的查看系统内存使用情况: [root@blliu ~]# free -mt             total       used       free     shared    buffers     cachedMem:          3886…
1.CAS导致ABA问题: CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并交换,那么在这个时间差中会导致数据的变化. 比如:线程1从内存位置V中取出A,这时线程2也从V中取出A,线程2进行了一些操作将值改成了B,然后线程2又将V的数据改回A:此时线程1进行CAS操作发现内存中仍然是A,然后线程1操作成功. 尽管线程1的CAS操作成功,但是不代表这个过程就是没有问题的. 解决ABA问题:利用原子引用+修改版本号(类似时间戳),每次需要获取到版本最新的值进行处理. 2.原子引…
问: 了解volatile关键字么? 答: 他是java 的关键字, 保证可见性, 不保证原子性, 禁止指令重排 问: 你说的这三个特性, 能写代码证明么? 答: .... 问: 听说过 CAS么 他的缺点是什么? 什么是ABA, 怎么解决? 问: 请手写一个自旋锁? 可见性证明: 接下来看使用 了 volatile的结果 不保证原子性 证明: private volatile Integer num = 0; private AtomicInteger anum = new AtomicInt…
Native方法,Unsafe与CAS操作 >>JNI和Native方法 Java中,通过JNI(Java Native Interface,java本地接口)来实现本地化,访问操作系统底层,如系统硬件等. JNI的实现就是在Java里声明方法,然后编写C/C++实现该方法,步骤: 编写带有native声明的方法的java类,得到.java文件 使用javac命令编译所编写的java类,生成.class文件 使用javah -jni java类名生成扩展名为h的头文件,也即生成.h文件 使用C…
什么是CAS机制 CAS是英文单词Compare and Swap的缩写,翻译过来就是比较并替换 CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B. 看如下几个例子: package com.example.demo.concurrentDemo; import org.junit.Test; import java.util.concurrent.atomic.AtomicInteger; public class CasTest { private static i…
CAS算法是硬件对于并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令. CAS用于管理对共享数据的并发访问. java的并发包中,AQS.原子操作类等都是基于CAS实现的. CAS 是一种 无锁的 非阻塞算法的 实现. CAS(Compare-And-Swap),简单来说就是比较和替换. 比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值. 比如说,想使用一台机器,先通过比较判断这台机器是否处于未占用状态,如果机器处…
CAS算法实现一个重要前提需要取出内存中某时刻的数据,而在下时刻比较并替换,那么在这个时间差类会导致数据的变化. 上篇文章讲到CAS会出现一个ABA问题.那什么是ABA问题呢? 官方一点的解释就是:当有多个线程对一个原子类进行操作的时候,某个线程在短时间内将原子类的值A修改为B,又马上将其修改为A,此时其他线程不感知,还是会修改成功. 代码案例: //线程操作资源,原子类ai的初始值为4 static AtomicInteger ai = new AtomicInteger(4); public…
一开始觉得ABA问题确实是个问题,但是具体场景是什么呢,虽然过程改了,但是结果一样,取的值也一样 不明所以,不过呢,这里也有一个小的demo可以说明一下 该例子通过AtomicReference判断对象User是否发生了改变,单从对象来说,没有变吧,结果输出也是 不会吧不会吧,你和我说,天黑了,看不清人,但是一摸就知道是人啊,在家里除了你武大郎还能是谁呢 我想想也是,我武大郎是人,西门庆不也是人啊,所以武大郎=西门庆,我潘金莲做的事怎么会是错的呢, 所以是true吧 那到底是不是true呢? 由…
前阵子在虚拟机上装好了centos6.0,并配好了nginx+php+mysql,但是本机就是无法访问.一直就没去折腾了. 具体情况如下 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3.虚拟机能访问自己的web 4.本机无法访问虚拟己的web 后来发现是防火墙将80端口屏蔽了的缘故. 检查是不是服务器的80端口被防火墙堵了,可以通过命令:telnet server_ip 80 来测试. 1>.解决方法如下: /sbin/iptables -I INPUT -p tcp --dpor…
本机开始安装了jdk1.6,然后安装了jdk1.8 当在调自动化的时候,发现传入函数传参String类型,报错The type java.lang.Object cannot be resolved It is indirectly referenced ... step1: Windows-Preference-添加1.6的路径 step2: Build java path将jre改为1.6 因为Windows-Preference-Java-Complier里面有1.6,这个地方和上面ste…
一般真机调试时DDMS里面的File Explorer是不能打开/data 目录的,不过也很容易解决. 1.首先手机要root.这个很简单,网上一大堆资料和软件. 2.仅仅root之后还不行,下载一个ES 文件浏览器(或类似的软件),授予该软件root权限. 3.然手在ES 里面找到/data 目录,修改它的属性.把它的读.写.执行的权限全部开放出来. 然后就大功告成了.…
之前还是写过蛮多的关于锁的文章的: http://www.cnblogs.com/charlesblc/p/5994162.html <[转载]Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自> http://www.cnblogs.com/charlesblc/p/5935326.html <[Todo] 乐观悲观锁,自旋互斥锁等等> http://www.cnblogs.com/charlesblc/…
http://coolshell.cn/articles/8239.html CAS的ABA问题 所谓ABA(见维基百科的ABA词条),问题基本是这个样子: 进程P1在共享变量中读到值为A P1被抢占了,进程P2执行 P2把共享变量里的值从A改成了B,再改回到A,此时被P1抢占. P1回来看到共享变量里的值没有被改变,于是继续执行. 虽然P1以为变量值没有改变,继续执行了,但是这个会引发一些潜在的问题.ABA问题最容易发生在lock free 的算法中的,CAS首当其冲,因为CAS判断的是指针的…
在一次调试中,出现了这个错误: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 详细报错信息如下: 严重: sun.security.validator.ValidatorException: PKIX path building failed: sun…
转自:http://2015.iteye.com/blog/1567777 以前写了一篇文章:iOS消息推送机制的实现,这篇文章中生成的是p12文件,但是php是用的pem文件,生成的方法和p12文件有些不同. 一.CSR文件 1.生成Certificate Signing Request(CSR) 2.填写你的邮箱和常用名称,并选择保存到硬盘. 点击继续: 这样就在本地生成了一个Push.certSigningRequest文件. 二.SSL certificate文件 1.用你付过费的帐号登…
问题一:用真机通过USB连接电脑调试的时候报如下错:Could not get BatchedBridge, make sure your bundle is packaged properly,如图: 解决方案:首先找到adb.exe安装路径(我的在:D:\Android\sdk1\platform-tools), 打开cmd运行如下命令: adb reverse tcp:8081 tcp:8081 再运行 react-native run-android…
Minor GC Young GC Full GC Major GC https://blog.csdn.net/chenleixing/article/details/46706039 内存划分为 Eden.Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生带即方法区的回收(JDK…
Kali系统和烧录软件 链接:https://pan.baidu.com/s/1v78d62hdF95NM2minct9sw 提取码:b08k 1.无效的方法: (1)执行 df -m,然后查看U盘设备是否挂载到了/media,导致cd-rom不能被挂载,执行 umount  /media. (2)在光驱加载安装界面,把U盘拔下换到电脑的另外一个usb接口,或者插拔一下U盘. 2.解决方法: 之前我个人一直是将大白菜作为写入 ISO 文件的工具,但是发现使用这种方式写入的 Kali ISO文件,…
点进来的基本都是遇到liunx变矿机的小伙伴吧(cpu运载300%) 卡的连终端都很难打开 开下来之后提示 大意是, 到xxx网站给钱了事, 不过基本这个网站基本也上不去, 要么是暴力破解, 要么是通过 redis 6379端口 详情了解redis安全漏洞 遇到这种问题毫无疑问: 先要把突然出现的乱七八糟的占cpu过高的进程kill -stop pid 暂停掉, 不要尝试直接kill -9 pid cd /etc/cron 查看定时任务 如果在/var/spool/cron这里面也看下 非法的定…
什么是ARC Automatic Reference Counting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入的最大的变革和最激动人心的变化.ARC是新的LLVM 3.0编译器的一项特性,使用ARC,可以说一举解决了广大iOS开发者所憎恨的手动内存管理的麻烦. 在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不写retain,release和autorelease三个关键字就好-这是ARC的基本原则.当ARC开启时,编译器将自动在代码合适的地方插入ret…
1.去掉勾选:使用共享运行时 2 检查android SDK是否安装了NDK 3.使用真机运行编译APK…
1.无效的方法: (1)执行 df -m,然后查看U盘设备是否挂载到了/media,导致cd-rom不能被挂载,执行 umount  /media. (2)在光驱加载安装界面,把U盘拔下换到电脑的另外一个usb接口,或者插拔一下U盘. 2.有效的方法: 之前我个人一直是将大白菜作为写入 ISO 文件的工具,但是发现使用这种方式写入的 Kali ISO文件,无法在物理机上加载,也就是说会出现无法加载光驱的问题.后来再改用 Win32DiskImager 将  ISO 文件写入到 U 盘后,问题得以…
首先 virtual network editor 设为桥接 选定无线网卡 虚拟机的网络设置 选桥接. 其次, 如果不能互相ping通,注意主机是否关闭了防火墙,是否退掉了360(没验证), 还要注意虚拟机(客户机)是否关闭了防火墙(我死在这里,困扰我好久),ubuntu关掉防火墙是:sudo ufw disable  (或者   ufw disable   ) ----- 另外,如果不行,就重启试试,重启主机,重启虚拟机.不同的机器可能适应场景不一样. 如果是有线连接,比较好设置,网上有很多资…