Volatile关键字实现原理 1、认识volatile关键字 程序举例 用一个线程读数据,一个线程改数据 存在数据的不一致性 2、机器硬件CPU与JMM (1)CPU Cache模型 (2)CPU缓存的一致性问题 解决方案: 1)总线加锁(粒度太大) 2)MESI() Cache line CPU ...
分类:
其他好文 时间:
2019-03-19 21:30:25
阅读次数:
153
碰到的问题 (1)线程操作问题,因为单机节点,代码加锁就好了,后续再写 (2) 消费者写hdfs的时候以流的形式写入,但是什么时候关闭流就是一个大问题了,这里引入了 fsDataOutputStream.hsync(); 生产者 1 package com.xuliugen.kafka.demo; ...
分类:
其他好文 时间:
2019-03-19 15:03:25
阅读次数:
119
最近在学线程,在加上操作系统也在学线程,于是乎有了这篇文章 问题描述: 一群生产者进程在生成产品,并将这些产品提供给消费者进程去消费. 他们之间有一个公共的缓冲区用来存放产品,当产品为空时消费者不能消费,当产品为满时生产者不能生产 CPP实现 利用mutex 互斥量 来对缓存区的操作进行加锁 C++ ...
分类:
系统相关 时间:
2019-03-19 01:02:36
阅读次数:
197
首先贴上源码中的注释 在一个String类上调用这个方法的时候如果常量池中存在和这个String对象相同的对象的时候,直接返回常量池中的常量,如果常量池中不存在这个对象,就直接将其将其加入常量池,并且返回一个引用。 intern()方法直接从常量池中取值,这样会比直接从堆中取值快。 执行“==”效率 ...
分类:
其他好文 时间:
2019-03-17 12:18:53
阅读次数:
169
背景 背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路 ...
分类:
数据库 时间:
2019-03-14 18:38:01
阅读次数:
162
悲观锁 总是架设最坏的请款,每次拿数据都认为别人会修改数据,所以要加锁,别人只能等待,直到我释放锁才能拿到锁;数据库的行锁、表锁、读锁、写锁都是这种方式,java中的synchronized和ReentrantLock也是悲观锁的思想。 乐观锁 总是架设最好的情况,每次拿数据都认为别人不会修改数据, ...
分类:
其他好文 时间:
2019-03-12 14:17:13
阅读次数:
189
Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而 ...
分类:
编程语言 时间:
2019-03-11 23:41:43
阅读次数:
198
ThreadLocal 一.引入 在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。但是局部变量也有问题,就是在函数调用的时候,传递起来很麻烦;用一个全局dict存放所有的Student对象 ...
分类:
编程语言 时间:
2019-03-11 20:09:48
阅读次数:
232
以下测试基于mysql5.7,隔离级别为:REPEATABLE READ 建表语句如下: 表数据如下: 索引列加锁 以下测试省略开启事务的sql 设client 1,分别执行如下测试sql(只是写在一起但是分别执行,每条测试sql都会单独开启事务) client2,分别执行以下测试sql 括号内是对 ...
分类:
数据库 时间:
2019-03-10 00:11:10
阅读次数:
255
首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法、变量。 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在jdk java.util 并发包中已经为我们提供了这些方法去加锁, 比如synchronized 关 ...
分类:
其他好文 时间:
2019-03-08 18:36:01
阅读次数:
131