自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jcsyl_mshot的博客

他山之石

  • 博客(13)
  • 收藏
  • 关注

原创 ConcurrentHashMap

由于HashMap 在执行并发put操作时候会引起死循环(多次添加,会覆盖掉原来的vaue值不影响),使用HashTable,在put ()和get() 上都存在线程阻塞,因此效率低下。ConcurrentHashMap的锁分段技术能够有效提升并发访问量。 在 ConcurrentHashMap 中,不允许用 null 作为键和值。 ConcurrentHashMap 使用分段锁技术,将数据分成...

2018-03-31 22:12:07 152

原创 HashMap

HashMap低层实现原理HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(哈希冲突的解决方案有多种:开放定址法(发生冲突,继续寻找下一块未被占用的存储地址),再散列函数法,链地址法,而HashMap即是采用了链地址法),如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定...

2018-03-31 21:03:28 899 3

原创 Condition 接口

任意一个java对象,都拥有一组监视器方法(Object),主要包括wait()、notify()以及notifyall(),这些方法配合synchronized同步关键字,可以实现通知等待模式。Condition接口也提供类似Object的监视器方法,与lock 配合实现等待/通知模式。condition对象是由lock对象创建出来,依赖于Lock对象,一般会将condition变量作为成员变量...

2018-03-31 14:58:16 172

原创 java 重入锁和读写锁

重入锁 顾名思义,就是支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁,并且支持获取锁的公平和非公平性选择。synchronized 关键字隐私支持重进入,ReentrantLock在调用lock 方法时候,已经获取到锁的线程能够再次调用lock()方法时而不被阻塞。 公平的获取锁,也就是等待时间最长的线程最优先获取锁,也可以说获取是顺序的。ReentrantLock提供一...

2018-03-30 10:57:07 340

原创 自定义同步组件——TwinsLock

设计一个同步工具,该工具同一个时刻,只允许两个线程同时访问,超过两个线程访问将会被阻塞。 分析:首先,确定访问模式,TwinLock能够同一时刻支持多个线程同时访问,这明显是共享式访问。这需要同步器提供的acquireShared(int args)方法和Share相关的方法,同时要求重写tryAcquireShared(int args)等方法。 其次,定义资源数量,TwinsLock在同一...

2018-03-29 14:54:16 614

原创 Java 中的锁之Lock接口

锁是控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁是允许多个并发线程的访问,如读写锁),在Lock接口出现之前,Java程序靠synchronized关键字实现锁功能的。Java SE5之后,并发包里增加了Lock 接口(以及相关实现类)用来实现锁功能,提供类似的同步功能,缺少synchronized 隐身释放锁的便捷性,但是拥有锁的获取与释放的可操作...

2018-03-28 14:58:05 465

原创 static

C++中static关键字的的使用函数体内 static 变量的作用范围为该函数体,不同于 auto 变量, 该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值。在模块内的 static 全局变量可以被模块内所有函数访问,但不能被模块外其他函数访问在模块内的static 函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内在类的static 成员变量属...

2018-03-27 17:21:06 139

原创 Java 并发编程基础之线程应用实例

线程应用实例等待超时模型: 在等待/通知范式基础上增加了超时控制,这使得该模式相比原有范式更具有灵活性。总体思路如下 构造数据连接池,模拟出获取,使用,释放连接等方法,由于获取释放等方法将改变数据连接池中资源的数量,为实现线程安全,用synchronized修饰数据池对象。注意,这里的超时获取,与对象锁的超时获取有异曲同工之妙,原理基本一致。 在测试中,用CountDo...

2018-03-27 13:42:21 145

原创 数组调整-奇数位于偶数前

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路分析:这道题要求把奇数放到数组前半部分,偶数放到数组后半部分,,因此所以奇数应该位于偶数前面,因此可以维护两个下标,第一个指向数组第一个位子,只向后移动;第二个指向数组最后一个位置,只向前移动。如果第一个指针指向的数字是偶数...

2018-03-25 22:31:05 152

原创 Java 并发编程基础之线程通信

在进行进程通信之前,我们先了解下Daemon线程(即守护线程):一种支持型线程,主要作为程序中后台调度以及支持性工作。这就意味着1)用户线程(如MAIN线程等)不会是守护线程2)JVM中没有非Daemon线程时,Daemon立即终止,并且finally块也不执行。通常通过thread.setDaemon(true) 将一个线程设置为守护进程。课题一:启动和终止进程 1)构造线程:线程对象在构造的时...

2018-03-25 20:25:14 140

原创 java秒杀系统实现

秒杀系统高并发优化:系统流程 秒杀未开始【详情页】(各种商品信息)包含-系统时间-倒计时;进入秒杀环节【地址暴露接口】(拿到秒杀地址)-【执行秒杀操作】-【放回结果】具体优化操作:详情页:用户大量刷新,可以将detail 页静态化,静态资源css,js等部署到CDN(内容分发网络,可以是动态也可以是静态资源,加速用户获取数据的系统,部署在用户最近的网络节点,命中CDN不需要访问后端服务器) ,这些...

2018-03-24 16:59:39 3587

原创 Java 并发机制之Synchronized

在多线程并发编程中synchronized的一直是元老级别角色,通过对象的内置锁实现互斥访问共同变量,通常被称为重量级锁,但是为了减少获得锁和释放锁带来的性能消耗,在jdk 1.6中引入了偏向锁和轻量级锁。在以下博文中,我们先讨论其实现底层原理以及他的锁升级过程。java 中每一个对象可作为锁,具体有三种表现形式:1)对于普通同步方法,锁是当前实例对象 2)对于静态同步方法,锁是当前类的class...

2018-03-24 14:22:04 232

原创 Java 并发机制之volatile

在多线程并发编程中,volatile 是轻量级synchronized,被关键字volatile修饰的域变量被称为共享变量,因此在开发过程中是可见的,即一个线程修改一个共享变量时候,另外一个线程能读到这个修改的值。因此在线程同步中具有以下几个特性:1)为域变量提供一个免锁机制2)该域能够被其他线程更新3)每次使用需要从内存中重新获取4)不是原子操作,不能被final 修饰vola...

2018-03-24 13:18:50 253

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除