集合类不安全之并发修改异常

集合类不安全之并发修改异常ArrayList并发修改异常代码import java.util.ArrayList; import java.util.List; import java.util.UUID; public class ContainerNotSafeDemo { public static void main(String[] args) { Li...

Java 2020-02-22 PM 1414次 0条

CAS的ABA问题及解决

CAS的ABA问题及解决问题描述:当获得对象当前数据后,在准备修改为新值前,对象的值被其他线程连续修改了两次,而经过两次修改后,对象的值又恢复为旧值,这样当前线程无法确定判断这个对象是否修改过。解决方法:JDK1.5可以利用AtomicStampedReference类来解决这个问题,AtomicStampedReference内部不仅维护了对象值,还维护了一个时间戳。当AtomicStam...

Java 2020-02-22 PM 1469次 0条

CAS简介

CAS简介一、CAS概念CAS的全称为Compare And Swap即比较并交换,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值。看起来这是两步操作,但是由于底层硬件的支持,使两步操作能一步完成,从而保证了原子性,避免了独占锁的资源浪费。CAS并发原语体现在Java语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS...

Java 2020-02-22 PM 1755次 0条

单例模式volatile分析

单例模式volatile分析概述DCL(双端检锁)机制不一定线程安全,原因是有指令重排序的存在,加入volatile可以禁止指令重排原因在于某一个线程执行到第一次检测,读取到instance不为null时,instance的引用对象可能没有完成初始化。instance = new SingletonDemo();可以分为以下3步完成memory = allocate();//1.分配对象内存...

Java 2020-02-21 AM 1291次 0条

【转载】单例模式简介

【转载】单例模式简介一、概述​ 单例模式是设计模式中相对简单且非常常见的一种设计模式,但是同时也是非常经典的高频面试题,相信还是有很多人在面试时会挂在这里。本篇文章主要针对单例模式做一个回顾,记录单例模式的应用场景、常见写法、针对线程安全进行调试(看得见的线程)以及总结。相信大家看完这篇文章之后,对单例模式有一个非常深刻的认识。文章中按照常见的单例模式的写法,由浅入深进行讲解记...

Java 2020-02-20 PM 1332次 0条

LeetCode-4 寻找两个有序数组的中位数

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...

Java 2020-02-19 AM 1362次 0条

【转载】volatile关键字简介

【转载】volatile关键字简介Java线程控制中常见的两个关键字:synchronized、volatile一、volatile是什么?volatile是Java中的关键字,也是Java虚拟机提供的轻量级的同步机制(乞丐版的synchronized)。二、volatile的三大特性1.可见性2.不保证原子性3.禁止指令重排序三、为什么说volatile是轻量级的同步机制?因为大多数多线程...

Java 2020-02-18 AM 1258次 0条

LeetCode-3 无重复字符的最长子串

LeetCode-3 无重复字符的最长子串难度:中等分类:字符串解决方案:双指针、滑动窗口题目描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为3。示例2:输入: "bbbbb" 输出: 1 解释: 因为无重复...

Java 2020-02-17 PM 1259次 0条

数据结构和算法学习--二叉排序树

数据结构和算法学习--二叉排序树一、二叉排序树介绍二叉排序树:BST(Binary Sort(Search) Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据(7,3,10,12,5,1,9),对应的二叉排序树为:二、二叉排序树创建和遍历一个数组创建成...

Java 2020-02-16 PM 1581次 0条

LeetCode-1.两数之和

LeetCode-1.两数之和题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法一:通过暴力搜...

Java 2020-02-15 PM 1197次 0条