CAS简介一、CAS概念CAS的全称为Compare And Swap即比较并交换,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值。看起来这是两步操作,但是由于底层硬件的支持,使两步操作能一步完成,从而保证了原子性,避免了独占锁的资源浪费。CAS并发原语体现在Java语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS...
单例模式volatile分析概述DCL(双端检锁)机制不一定线程安全,原因是有指令重排序的存在,加入volatile可以禁止指令重排原因在于某一个线程执行到第一次检测,读取到instance不为null时,instance的引用对象可能没有完成初始化。instance = new SingletonDemo();可以分为以下3步完成memory = allocate();//1.分配对象内存...
【转载】单例模式简介一、概述 单例模式是设计模式中相对简单且非常常见的一种设计模式,但是同时也是非常经典的高频面试题,相信还是有很多人在面试时会挂在这里。本篇文章主要针对单例模式做一个回顾,记录单例模式的应用场景、常见写法、针对线程安全进行调试(看得见的线程)以及总结。相信大家看完这篇文章之后,对单例模式有一个非常深刻的认识。文章中按照常见的单例模式的写法,由浅入深进行讲解记...
LeetCode-4 寻找两个有序数组的中位数题目描述给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]num...
【转载】volatile关键字简介Java线程控制中常见的两个关键字:synchronized、volatile一、volatile是什么?volatile是Java中的关键字,也是Java虚拟机提供的轻量级的同步机制(乞丐版的synchronized)。二、volatile的三大特性1.可见性2.不保证原子性3.禁止指令重排序三、为什么说volatile是轻量级的同步机制?因为大多数多线程...
LeetCode-3 无重复字符的最长子串难度:中等分类:字符串解决方案:双指针、滑动窗口题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为3。示例2:输入: "bbbbb" 输出: 1 解释: 因为无重复...
数据结构和算法学习--二叉排序树一、二叉排序树介绍二叉排序树:BST(Binary Sort(Search) Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据(7,3,10,12,5,1,9),对应的二叉排序树为:二、二叉排序树创建和遍历一个数组创建成...
LeetCode-2 两数相加题目:2. 两数相加难度:中等分类:链表解决方案:链表的遍历题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 注意:您可以假设除了数字0之外,这两个数都不会以0开头。示例:输入:(2 -> 4 -> 3...
LeetCode-1.两数之和题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法一:通过暴力搜...