语言
文章平均质量分 80
DY_浅陌初心
从今天起,过好每天一天
展开
-
Java---HashMap工作原理和实现
1.概述http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/1.1官方介绍Hash table basedimplementation of the Map interface. This implementation provides all of the optional map operations, and permits.原创 2021-06-21 15:31:22 · 149 阅读 · 0 评论 -
Java---并发容器之ConcurrentLinkedQueue
一.概述ConcurrentLinkedQueue是一个基于连接节点的无界线程安全队列(java并没有提供构造方法来指定队列的大小,因此它是无界的)。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最近加入的,该队列不允许null元素。为了提高并发量,它通过使用更细的锁机制,使得在多线程环境中只对部分数据进行锁定,从而提高运行效率,通常ConcurrentLikedQueue性能好于BlockingQueue。二.结构ConcurrentLinkedQueue内部持有2个节点:head头结点原创 2021-02-23 14:58:44 · 391 阅读 · 2 评论 -
Java---并发容器之BlockingQueue(阻塞队列)
一.概述阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。二.方法 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offe.原创 2021-02-23 11:26:23 · 142 阅读 · 1 评论 -
Java---并发容器之CopyOnWriteArrayList
一.概述ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制(),会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器,当然可以用Vector,或者使用Collections的静态方法将ArrayList包装成一个线程安全的类,但是这些方式都是采用Java关键字synchronzied对方法进行修饰,利用独占式锁来保证线程安全的。但是,由于独占式锁在同一时刻原创 2021-02-22 15:06:00 · 151 阅读 · 0 评论 -
Java---并发容器之ConcurrentHashMap
一.概述HashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁住了,全表锁),当多线程并发的情况下,都要竞争同一把锁,导致效率极其低下。而在JDK1.5后为了改进Hashtable的痛点,ConcurrentHashMap应运而生。ConcurrentHashMap不支持null键和null值,当存在null时,会报空指针异常!!!(因原创 2021-02-22 14:10:19 · 166 阅读 · 0 评论 -
Java---Semaphore
一.概念Semaphore(信号量)可以用来控制同时访问特定资源的线程数量,常用于限流场景。Semaphore支持公平锁和非公平锁。Semaphore接收一个int整型值,表示许可证数量,如果许可证剩余数量大于零时,线程则允许访问该共享资源;如果许可证剩余数量为零时,则拒绝线程访问该共享资源。 Semaphore所维护的许可证数量就是允许访问共享资源的最大线程数量。 所以,线程想要访问共享资源必须从Semaphore中获取到许可证。二.原理Semaphore内部主要通过AQS(Abstr..原创 2021-02-20 15:57:09 · 92 阅读 · 0 评论 -
Java---ReentrantReadWriteLock
一.概述ReentrantReadWriteLock是在AQS的基础上实现的一个可重入锁。该锁具备重入锁的可重入性、可中断获取锁等特征,但是与ReentrantLock不一样的是,它的内部维护了一把读锁和一把写锁,读锁是共享锁,写锁是排他锁。这样就保证了写数据时的线程安全性,又保证了读数据时的多线程并发,比较适合读取数据较多而写数据较少的并发场景。写锁是独占的,写时不能有其他线程写也不能读;所有的独锁都释放完之前也不能加写锁。ReentrantReadWriteLock实现了ReadWriteLoc原创 2021-02-20 14:43:06 · 152 阅读 · 0 评论 -
Java---锁
1.Java里面的各种锁答:其实如果按照名称来说,锁的分类为:公平锁/非公平锁、可重入锁/不可重入锁、独享锁/共享锁、互斥锁/读写锁、乐观锁/悲观锁、分段锁、偏向锁/轻量级锁/重量级锁、自旋锁:(1)公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁。Java中的ReentrantLock,可以通过构造器指定该锁是否公平,默认是非公平的,非公平锁的优势在于吞吐量比公平锁大。而Java中原创 2021-02-03 14:30:24 · 83 阅读 · 0 评论 -
Go---安装Go语言及搭建Go语言开发环境
1.安装1.1下载地址Go官网下载地址:https://golang.org/dl/1.2选择对应的系统下载(这里使用的是Linux系统)1.3.解压tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz1.4.配置环境变量(一般自动会配置好的)vim /etc/profile在profile中添加go的环境变量,添加完成后可通过. /etc.profile 让配置文件立即生效。(.和/之间有空格)#goexpor原创 2021-01-07 09:44:20 · 128 阅读 · 0 评论 -
python算法题
1 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少? for a in range(1,5): for b in range(1,5): for c in range(1,5): for d in range(1,5): if(a!=b and a!=c and a!=d and b!...原创 2018-06-23 10:44:47 · 5742 阅读 · 0 评论 -
python入门
Python中数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:一、整数Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和翻译 2018-01-23 10:07:57 · 221 阅读 · 0 评论