自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 资源 (4)
  • 收藏
  • 关注

原创 2.1 锁的定义

Lock类的注释已经完全解释Lock的定义。这里仅做复述和自我理解:锁是用于控制多个线程访问共享资源的工具。一般,锁提供对共享资源的独立访问:一次只有一个线程可以获取锁,所有对共享资源的访问都需要先获取锁。但是,某些锁可以并发访问共享资源。synchronized提供对每个对象关联的隐式监视器锁的访问,但强制所有锁的获取和释放以快的结构方式发生:当获取多个锁时,他们必须以相反的顺序释放,并且所有锁都必须在他们被获取的同一个词法范围内释放虽然synchronized使使用监视器锁变成变得更加容易,并有助

2021-10-27 09:41:09 278

原创 2.2 可重入锁ReentrantLock

可重入互斥锁与使用synchronized方法和语义访问的隐式监视器锁具有相同的基本行为和语义,但具有扩展功能。ReentrantLock由上次成功锁定但是尚未解锁的线程拥有。当另一个线程不拥有锁时,调用lock的线程将返回并成功获取锁ReentrantLock实现了公平锁和非公平锁,由构造函数的入参控制:当入参为true时,为公平锁,锁倾向于对等待时长最长的线程授权使用公平锁。多个线程访问公平锁一般而言会比非公平锁慢,但是在获取锁和不出现饥饿的时间差异较小。锁的公平性并不能保证线程调度的公平性。因

2021-10-27 09:40:17 148

原创 1.6 阻塞工具类LockSupport

LockSupport是干什么的LockSupport是一个编程工具类,主要是为了阻塞和唤醒线程。它的所有方法都是静态方法,它可以让线程在任意位置阻塞,也可以在任意位置唤醒。LockSupport的原理:LockSupport通过调用UNSAFE.park方法来实现线程的阻塞。对于存在资源竞争的线程,使用blocker来实现线程的阻塞。每个线程都有一个parkBlocker对象,对象声明为volatile,这个blocker是用来记录线程被阻塞时被谁阻塞的,用于线程监控和分析工具来定位原因。Loc

2021-10-22 09:35:28 345

原创 1.5 详解AQS-ConditionObject

5. 详解AQS-ConditionObjectConditionObject同样有一个队列,且保持队列的头结点和尾结点:Node firstWaiterNode lastWaiterConditionObject对外暴露signal和await方法用于唤醒和等待。对于竞争资源的线程来讲,需要先等待再唤醒。无论是signal还是和await,都需要当前线程持有锁才能操作。对于await来讲,应该是当前线程主动阻塞,然后将当前线程加入到等待队列中,等待其他线程唤醒。而唤醒signal应该是将这些

2021-10-22 09:34:42 315

原创 1.4 详解AQS-release

release是独占模式下的释放方法,release可能失败。具体实现:public final boolean release(int arg) { if (tryRelease(arg)) { Node h = head; if (h != null && h.waitStatus != 0) unparkSuccessor(h); return true; } return false;

2021-09-16 09:55:48 244

原创 1.3 详解AQS-acquireShared方法

acquireShared是共享模式下获取锁的方法。和acquire方法相似,都是先获取锁,如果获取不到则添加到队列中,从队列中自旋获取锁。自旋获取锁代码:private void doAcquireShared(int arg) { final Node node = addWaiter(Node.SHARED); boolean failed = true; try { boolean interrupted = false; for (;;)

2021-09-14 09:35:41 561

原创 1.2 详解AQS-acquire方法

AQS 是一个同步器的模板,约定其他同步器都继承AQS来实现自己的同步器。作为一个模板,AQS提供了对外的使用接口,保证使用方式统一;也提供了对外的具体实现接口,来提供各自的特色。AQS定义了两种模式的同步器:共享模式和独占模式。AQS实现了两个模型下的同步器获取和释放。共享模式:当前线程拿到同步器后,还会尝试唤醒后继节点独占模式:只保证自己获得了同步器,在自己释放同步器的时候去唤醒其他节点。AQS虽然是一个抽象类,但是其并没有抽象方法。需要子类实现的方法,AQS都抛出了异常。这些方法如下:

2021-09-09 09:01:47 847

原创 1.1 AQS整体框架

1、AQS是什么?AQS(AbstractQueuedSynchronizer)抽象队列同步器。AQS为线程的同步和等待操作提供一个基础的模板,通过一个FIFO的等待队列来实现阻塞锁和其他同步器(信号量、事件等等)2、AQS的设计AQS定义一个基础的同步器有一下三个组件:exclusiveOwnerThread 当前占有同步器的线程state 当前同步器的状态 volatile修饰CLH队列 链表型队列,记录等待同步器的线程。内部表现字段为head和pre。transient vol

2021-09-04 16:21:00 218

java微信公众号平台

java开发微信公众号,使用spring+mybatis,本身功能简单,仅仅是消息推送,一些配置信息在配置文件中,基础的微信开发

2017-12-18

MFC飞机大战

使用MFC实现简单的飞机大战

2016-12-11

飞机大战素材

飞机大战素材

2016-11-16

MFC完成Excel的读取写入

用MFC简单地读取写入excel,内容很简单

2016-10-06

空空如也

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

TA关注的人

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