首页
学习
活动
专区
工具
TVP
发布

我是攻城师

专栏作者
492
文章
962659
阅读量
119
订阅数
什么是线程安全?
线程安全在多线程编程时是一个比较重要的概念,我们下先来看下维基百科是如何定义这个概念的:
我是攻城师
2019-03-06
1.9K0
关于Java的BIO,NIO和AIO的演进
Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊。
我是攻城师
2018-12-17
9660
如何避免单例模式被破坏
这里不再讨论单例的模式的n种写法,仅仅讨论如何避免单例模式被破坏,看下面的一个例子:
我是攻城师
2018-11-07
1.4K0
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
(2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路
我是攻城师
2018-09-30
1.4K0
理解另类的并发安全实现CopyOnWriteArrayList
在Java的并发包java.util.concurrent里面有一个比较有意思现象,针对Map和LinkList都有对应的高效的+线程安全的并发实现类:
我是攻城师
2018-09-30
1.3K0
理解Java并发工具类Exchanger
Exchanger类是JDK5中的一个并发工具辅助类,这个类的主要作用是可以用于两个线程之间交换数据,以实际生活中的场景来讲,比如很多小区楼下都有自取的快递柜,如果快递员来了,就把东西直接放快递柜子就行了,然后我们直接从柜子中取走东西即可。这个柜子就起到了媒介的作用。也就说柜子可以是双向信息交换的一个媒介,比如我需要邮寄东西,我可以提前把东西放进柜子,然后快递来了把新买的东西放进去,然后把需要邮寄的东西拿走,这样就完成了交换,但大多数时候,我们可能买东西比较多,邮寄东西比较少。 Exchanger在遗传算法和管道设计比较有用。
我是攻城师
2018-09-30
1.1K0
深入理解Java8并发工具类StampedLock
StampedLock类是JDK8里面新增的一个并发工具类,这个类比较特殊,在此之前我们先简单的了解一下关于数据库或者存储系统的锁策略和机制。
我是攻城师
2018-09-30
5480
在ReadWriteLock类中读锁为什么不能升级为写锁?
关于读写锁里面有一个锁升级和降级的问题,也就是写锁可以降级为读锁,但是读锁却不能升级为写锁。那么为什么是这样?
我是攻城师
2018-08-03
2.7K0
学习使用Lock+Conditionk编写三个经典多线程例子
在jdk5之后的高级并发包里面Lock接口可以替换原来jvm内置的锁synchronized关键字,同理使用Condition接口的await,signal,signalAll方法分别可以替换原来的协作方式wait,notify,notifyAll。
我是攻城师
2018-08-03
3360
Java单例模式之双检锁深入思考
单例模式在Java开发中是非常经典和实用的一种设计模式,在JDK的内部包的好多api都采用了单例模式,如我们熟悉的Runtime类,单例模式总的来说有两种创建方式,一种是延迟加载的模式,一种是非延迟加载的模式,今天我们来学习一下基于双检锁延迟加载的单例模式。
我是攻城师
2018-07-23
6.6K0
Java进阶之内存模型介绍
不管在什么编程语言里面,读取和写入都是我们程序最普遍的操作,在单线程的程序里面我们可能不关注线程的读写问题,但是一旦到多线程的环境下,读和写就会变得非常敏感。Java内存模型实际上是定义了在多线程环境下使用读和写操作结果一致性的问题。这个模型在JDK5中通过JSR-133议案进行了修订。
我是攻城师
2018-07-23
2960
Java开发者如何正确的使用String,StringBuffer,StringBuilder类
通过前面的文章,我们知道String类最大的特点是不可变性,这意味着对String类的任何修改都会新生成一个字符串,比如你执行了String类的substring,replace,toUpperCase,toLowerCase,trim方法都会生成一个新的字符串,一旦你的程序对字符串有大量修改,那么在jvm的堆内存中就会生成大量的旧的临时垃圾字符串对象,如何解决这一问题呢?
我是攻城师
2018-07-23
3720
理解Java中的hashCode和equals方法
在Java里面所有的类都直接或者间接的继承了java.lang.Object类,Object类里面提供了11个方法,如下: 这里面我们常用的方法有三个: toString方法,相信用过Java的人都不会陌生,默认打印的是:类名@十六进制的hashCode,源码中定义如下: 在经过重写后,我们可以打印一个class的所有属性,这样在打印log或调试时比较方便。 下面重点介绍下hashCode和equals方法: (1)equals方法,在JDK默认的情况下比较的是对象的内存地址,源码如下: (2)hashc
我是攻城师
2018-05-14
1.5K5
JDK8中HashMap的工作原理剖析
在Java语言里,HashMap无疑是使用频率非常高的一个类,了解它的内部实现将有助于更好的使用它。 在jdk8中的HashMap是由三种数据结构组成:数组 + ( 链表 or 红黑树 ) 图示如下:
我是攻城师
2018-05-14
1.4K4
如何备份ElasticSearch索引数据到HDFS上
在ElasticSearch里面备份策略已经比较成熟了 目前在ES5.x中备份支持的存储方式有如下几种: 在这里我们主要介绍如何备份索引数据到HDFS上。 首先,我们先从名词概念上理解下备份相关术语:
我是攻城师
2018-05-14
1.6K0
JDK8中ArrayList的工作原理剖析
ArrayList也是在Java开发中使用频率非常高的一个类,内部是基于数组的动态管理的方式来实现的。数组在内存里面是一块连续的存储空间,其优势是基于下标的随机访问和遍历是非常高效的。 JDK8源码中
我是攻城师
2018-05-14
7640
Spring-Boot1.4.0项目部署问题小记
使用最新版的Spring-Boot1.4.0开发完项目后,部署到Linux机器上,其JDK版本是JDK7,启动报错: org/eclipse/jetty/webapp/WebAppContext : Unsupported major.minor version 52.0 由于在spring-boot的pom文件里面使用了jetty依赖: <dependency> <groupId>org.springframework.boot</groupId> <art
我是攻城师
2018-05-14
6210
4个理由告诉你Java为何排行第一
Java已经有20年的历史了,甚至更久,而这取决于你所询问的人和你的计算方式。忽略它的年龄不看,Java依然排行第一。它的实用性、性能和向后兼容性都彰显其价值所在。 2016年伊始,标志着我们已经走过了Java的20年历程。事实上,虽然Java宣称是于1995年5月23日公开发行(HotJava 浏览器 却并没有获得同样的成功),但第一版官方JDK是在1996年的1月23日才正式发行,因此Java可以称得上是刚满20岁。Java身上有很多值得回顾 的东西,但我想更加令人感兴趣的是Java在20年之后依然能够
我是攻城师
2018-05-14
5020
SolrCloud5.4.1集群实战(一)
古时候,人们用一头牛拉不动一个耕地的犁时,不会去找个比这头牛更大的牛,而是会直接使用两个牛一起参与耕地。在分布式计算中,道理同样如此,Hadoop就是一个典型的例子。诸如此类的有很多,这就是典型水平切分架构。早期的solr仅仅支持主从架构模式,这种架构可以提高集群的吞吐量和可靠性,当面临越来越多的数据时,并不能提升检索性能,所以在solr4.x之后,开始支持cloud模式的集群,可以将一份超大索引水平切分到多台机器上,从而提升系统的检索性能,当然也兼具了主从模式的优点,支持容错,副本,扩容等。 基础环境
我是攻城师
2018-05-14
8050
没有更多了
社区活动
RAG七天入门训练营
鹅厂大牛手把手带你上手实战
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档