Concurrent Program
文章平均质量分 79
weixin_41186611
这个作者很懒,什么都没留下…
展开
-
Concurrent Program——Executor框架梳理
然后将任务提交给Executor框架下的另一个部分即实现管理一个线程池和执行任务的类,Executor接口以及ExecutorServerice接口,接口只是定义了一些方法,具体的实现由下面的实现类去实现,实现一个什么样的线程池,以及送进来的任务放到什么样的工作队列中,任务怎么执行。线程池的好处有集中管理线程,重用线程,不浪费资源,提高响应速度等好处(避免了线程的创建过程)。我们的程序写出想要执行的任务,任务的类实现Runnable或者Callable接口。它实现了把任务和任务的执行解耦。...原创 2022-07-30 12:15:44 · 89 阅读 · 0 评论 -
深入理解Mysql系列——索引详解
而InnoDB使用了聚簇索引,可以说聚簇索引就是表,因为他的叶子节点上存放了数据行的所有数据,另外,InnoDB的二级索引和聚簇索引也有很大不同,二级索引中的叶子节点存放了主键值,这样当出现行移动时减少了二级索引的维护工作。而除了聚簇索引以外的所有索引都称为二级索引,二级索引的叶子节点内容是主键的值。主键索引存储的是主键id和全部数据,二级索引储存的是索引值和主键值,当我们查询的字段不在索引储存的数据中,就会进行回表,即通过普通索引找到主键值,再通过主键值查询主键索引找到要查的数据,这就是回表操作。...原创 2022-07-26 19:17:34 · 457 阅读 · 0 评论 -
Concurrent Program——深入理解ConcurrentHashMap
和Hashtable都是支持并发的,这样会有一个问题,当你通过get(k)获取对应的value时,如果获取到的是null时,你无法判断,它是put(k,v)的时候value为null,还是这个key从来没有做过映射。第一个结点(即table表中的结点,哈希值相同的链表的第一个节点)进行加锁(锁是该结点,如果此时还有其他线程想来put,会阻塞)(如果不加锁,可能在遍历链表的过程中,又有其他线程放进来一个相同的元素,但此时我已经遍历过,发现没有相同的,这样就会产生两个相同的)设置完毕后代表桶迁移工作已经完成,.原创 2022-07-22 01:34:22 · 88 阅读 · 0 评论 -
Concurrent Program——深入理解Volatile
在cpu中,例如一条指令的执行分为取指令,指令译码,执行指令,内存访问,数据写回这五个步骤。如果每一条指令都按这样的顺序串行执行,会耗费大量的时间,所以,后来cpu就设计为可以在同一时刻执行这五个阶段,即同一时刻可以执行多级指令,称为多级指令流水线。在某个时刻使用不同线程观察内存的数据,可能看到不一样的结果,因为写是需要耗时的,写和读之间,有的线程看到写发生了,有的看到没发生。当某一线程对一个变量进行了修改,它还没来得及将值更新回主存的时候,另一个核心中的线程对它进行了读取,就有可能读取的还是旧的值。...原创 2022-07-22 01:29:17 · 89 阅读 · 0 评论 -
Concurrent Program——深入理解AQS
AQS全称AbstractQueueSynchronizer,是区别于Synchronized,是java提供的另一个实现同步的体系。从下图中可以看出,常用的控制并发的工具都是基于AQS实现,比如ReentratLock,读写锁等。为什么要设计一套AQS框架?当程序发生并发的时候,有临界区需要保护,保护临界区最常用的就是锁(互斥量Mutex)锁的一种实现有Synchronized,另一种保护临界区就是信号量控制临界区的并发量,并发量=1的时候就是互斥量。,此类支持默认的。...原创 2022-07-22 01:10:17 · 144 阅读 · 0 评论 -
Concurrent Program——深入理解Synchronized
Synchronized关键字本质上是通过使得对象与操作系统提供的一个monitor对象关联来实现对对象上锁。为什么称它为重量级锁,就是因为它的锁竞争是在操作系统的层面中进行的,因为线程获取锁的过程是通过moniter对象来进行竞争和持有的。虽然它是最重量级的,但是它提供了最高级别的并发安全性,它能够同时保证1.原子性确保线程互斥的访问同步代码2.可见性保证共享变量的修改能够及时可见3.有序性禁止指令重排序可以理解为一个同步工具或一种同步机制,通常被描述为一个对象。...原创 2022-07-21 22:21:48 · 127 阅读 · 0 评论 -
Concurrent Program——深入理解CAS
CAS的全称为CompareAndSet,比较并设置。CAS可以说是并发编程的基石,很多实现并发的方式底层都是依赖于CAS操作。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”。CAS是项乐观锁技术在没有锁的机制下可能需要借助volatile原语,保证线程间的数据是可见的(共享的)。......原创 2022-07-18 12:30:26 · 135 阅读 · 1 评论 -
Concurrent Program——深入理解进程与线程
进程是程序的执行副本,程序是代码的静态表示,就是一串01的文本。单个程序可以有多个实例,且运行中的程序的每个实例都是一个进程。每个进程有单独的内存地址空间。线程是进程的执行单元。一个进程可以有一个或者多个线程。当一个进程开始时,它会被指定内存和资源。进程中的每个线程共享内存和资源。线程和进程的设计核心是解决资源分配问题对于一个运行起来的程序,cpu计算资源是直接分配给线程了,进程申请的是计算资源之外的资源,如内存,文件,权限等。......原创 2022-07-18 10:34:45 · 130 阅读 · 0 评论