【并发编程】从Java内存模型看并发数据共享与线程安全

Java内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。 Java内存模型原理 Java内存模型将Java虚拟机划分为线程栈和堆,如图: 每一个运行在Java虚拟机中的线程都有一个自己的线程栈,栈中包含这个线程调用的方法当前执行点相关的信息。一个线程仅能访问自己的线程栈,所以一个线程创建的本地变量只有其创建线程可以访问,其他线程不可见。 所有原始类型的本地变量都存放在线程栈上,对其他线程不可见。所以一个线程可能给另一个线程传递原始类型变量的
分类: 其他 发布时间: 05-01 22:57 阅读次数: 0

【并发编程】Java同步块synchronized

Java同步块分为四种: 1.实例方法 2.静态方法 3.实例方法中的同步块 4.静态方法中的同步块 实例方法同步 public synchronized void add(int value){ this.count += value; } Java实例方法同步是同步在拥有该方法的对象上。这样,每个实例其方法同步都是同步在不同对象上的,即该方法所属的实例。只有一个线程能够在实例方法同步块中运行。一个实例,一个线程。 静态方法同步 public static synchronized voi
分类: 其他 发布时间: 05-01 22:56 阅读次数: 0

【并发编程】线程通信与TheadLocal类

线程通信 线程通信的目标是使线程之间能够互相发送信号。或者,线程通信使线程能够等待其它线程。 通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值。线程A在一个同步块里设置boolean型成员变量hasDataToProcess为true,线程B也在同步块里读取hasDataToProcess。这个简单的例子使用了一个持有信号的对象,并提供了set和check方法。 public class MySignal{ protected boolean hasDataTo
分类: 其他 发布时间: 05-01 22:56 阅读次数: 0

从RocketMQ我们学到了什么?(NameServer篇)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/East_MrChiu/article/details/88677416 微信公众号:IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可了解更多精彩内容。问题或建议,请公众号留言。 文章目录 序 消息调度中心是今天的主角 路由注册 路由剔除 路由发现 CAP理论 之所以替换掉Zookeeper 学到了什么? 说在后面的话 序 在很久很久以前,人们之间
分类: 其他 发布时间: 05-01 22:56 阅读次数: 0

一篇读懂分布式架构下的负载均衡

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/East_MrChiu/article/details/88727155 微信公众号:IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可了解更多精彩内容,定期有福利相送哟 文章目录 什么是负载均衡? 负载均衡分类 二层负载均衡 三层负载均衡 四层负载均衡 七层负载均衡 负载均衡算法 静态均衡算法: 动态负债均衡算法: 说在后面话 什么是负载均衡? 百
分类: 其他 发布时间: 05-01 22:55 阅读次数: 0

你与解决“缓存污染”只差这篇文章的距离

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/East_MrChiu/article/details/88880578 微信公众号:IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可第一时间了解更多精彩内容,定期有福利相送哟。 文章目录 什么是缓存污染? 解决缓存污染的算法 LFU算法 LFU-Aging算法 Window-LFU算法 LRU算法 LRU-K算法 URL-Two queues算法
分类: 其他 发布时间: 05-01 22:55 阅读次数: 0

且听我一个故事讲透一个锁原理之synchronized

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/East_MrChiu/article/details/89163865 微信公众号:IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可第一时间了解更多精彩内容,定期有福利相送哟。 文章目录 故事从这里展开 重量级锁状态 轻量级锁状态 偏向锁状态 如何通过这四种状态实现性能大幅度提升的 Java对象头 锁的升级 偏向锁状态--->无锁不可偏向状态/轻
分类: 其他 发布时间: 05-01 22:55 阅读次数: 0

偏向锁到底是怎么回事啊啊啊啊

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/East_MrChiu/article/details/89263476 微信公众号:IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可第一时间了解更多精彩内容,定期有福利相送哟。 话说有这么一件事。 于是当天夜里,小哥哥便哼哧哼哧的画出了偏向锁的逻辑图。 其逻辑呢,各位看官待我慢慢道来。 看一张大图 (点击看大图) 流程讲解 当JVM启用了偏向锁模
分类: 其他 发布时间: 05-01 22:55 阅读次数: 0

什么,你的ThreadLocal内存泄漏了?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/East_MrChiu/article/details/89344298 微信公众号:IT一刻钟 大型现实非严肃主义现场 一刻钟与你分享优质技术架构与见闻,做一个有剧情的程序员 关注可第一时间了解更多精彩内容,定期有福利相送哟。 又是一个风和日丽的早上。 这天小美遇到了一个难题。 原来小美在做用户服务鉴权的时候,需要根据每个请求获取token: //获取认证信息 Authentication au
分类: 其他 发布时间: 05-01 22:54 阅读次数: 0

【codeforces 1154E】stl使用

1.题目链接。题目大意:n个人分成两组,人的编号是1-n。每个人都有一个val。现在分组的规则是这样的,首先选区val最大的以及左右k个作为第一组,第二轮挑选也是从剩下的中间挑选出val最大的及其左右两个,现在问你最后的分组情况。 2.首先根据val排序,放入队列。在后对于每次挑选,从队列里拿出元素,使用一个set维护一下下标。把左右的值存起来,然后从set里面删除。其实就是考察了一下STL用的熟练与否? #include <bits/stdc++.h> #include<queue> us
分类: 其他 发布时间: 05-01 22:54 阅读次数: 0

【cf 1144G】贪心选择一下

1.题目链接。题目大意:给定一个序列,这个序列可能是由一个严格单调递增,一个严格单调递减的序列组成。把这两个序列找出来,如果找不出来,输出NO,找出来输出Yes并把分组信息输出。 2.这个题其实可以贪心的选择。因为题目种有一个信息很关键,就是序列在合并之后,相对位置不会改变。所以对于每一个元素,我们考虑可以把它放在哪个序列里面,维护一个严格递增的,一个严格递减的。对于任意一个元素,与当前维护的数组的最后一个元素比较,如果发现他只能被放入一个数组,那么就放进去,如果发现二者都能,那么我们考虑它放
分类: 其他 发布时间: 05-01 22:54 阅读次数: 0

【POJ 2352】树状数组

1.题目链接。题目大意:给定n个点,对每一个点,求一下这个点左下方有多少个点。(左下方的定义就是:横纵坐标同时小于等于这个点的坐标)。 2.分析:由于题目比较良心,输入的时候y就是有序的,所以其实我们只需要统计一下横坐标小于等于这个点的数的数量即可。那么就比较简单了,我们对x轴建一颗树状数组,初始化为0,每次输入一个数据,把这个数据插入到树状数组里面,注意这里的插入其实是逻辑上的插入,也就是不是这里的树状数组的值加的是1,不是这个点的坐标,然后求一下sum(x),level的值加一。 #in
分类: 其他 发布时间: 05-01 22:53 阅读次数: 0

【POJ 1195】二维树状数组

1.题目大意。给定一个大小为s的矩阵,初始值全是0,然后两种操作,1:(x,y,val)在(x,y)这个点的值加上val。2:(l,r,x,y)询问以(l,r)为左上角,(x,y)为右下角这个矩阵里面所有值的和。 2.一个二维树状数组的裸题。二位树状数组其实就是一维树状数组的推广,对于每一行,我们用一个树状数组维护一下,然后再用一个数组维护一下所有的行。当然列也是一样的。这只是一个点修改,区间查询,对于区间修改点查询,我们可以使用二维差分,区间修改,区间查询,就是二维查分的二维前缀和。和一维数
分类: 其他 发布时间: 05-01 22:53 阅读次数: 0

【HDU 1556】区间修改点查询的树状数组

1.题目链接。裸的区间修改点查询的树状数组,采用一维差分数组实现。查询的时候,对这个差分数组求前缀和就是答案。 #include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<string.h> using namespace std; const int MAXN = 100010; int c[MAXN]; int n; int lowbit(int x) { return x & (-x); } void
分类: 其他 发布时间: 05-01 22:53 阅读次数: 0

【cf 1133D】注意一下小的细节

1.题目链接。题目大意:给定两个数组,a,b.用a,b构造c。其中c[i]=a[i]*d+b[i],d是任意的。现在让你来选择合适的d,然后使得c中0尽可能的多。求出这个最多的0. 2.这个最开始的想法就是对(-b/a)计数,然后发现精度不够。那么就对这个点计数好了,求一下gcd,然后对最简的点计数,注意0的情况特判掉。当然,这不是一个很好的写法,这个题显然是可以把这两个数求完gcd之后哈希掉的,比如哈希成一个ll(具体的哈希方法可以是,把a[i]作为ll的高32位,b[i]作为ll的低32位
分类: 其他 发布时间: 05-01 22:53 阅读次数: 0

【三维凸包】模板题

1.关于三维凸包的模板。拿的是kuangbin聚聚的。具体的题目有:HDU4273,HDU3662,POJ3528,POJ3682等。模板如下: const int MAXN = 550; const double eps = 1e-8; struct Point { double x, y, z; Point() {} Point(double xx, double yy, double zz) :x(xx), y(yy), z(zz) {} //两向量之差 Point o
分类: 其他 发布时间: 05-01 22:52 阅读次数: 0

【HDU 4267】三维树状数组

1.题目链接。题目的操作其实很像去区间修改,区间查询的操作了,但是这个操作的区间不再是连续的了,而是离散的。但是这里还是可以用树状数组维护的,因为k很小,所以k和i%k其实只有C(10,2)种情况,我们对每一种情况建一颗树状数组,然后查询的时候查对应的树状数组即可。 #include<bits/stdc++.h> using namespace std; #define lowbit(x) (x)&(-x) const int MAXN = 50000 + 5; int num[MAXN];
分类: 其他 发布时间: 05-01 22:52 阅读次数: 0

【POJ 3264】RMQ裸题

1.题目链接。题目大意:给定一个数组,和q组询问,魅族询问两个数字,l,r。输出l和r之间最大值和最小值之差。 2.行吧,RMQ裸题(不懂什么叫做RMQ的同学可以自行百度)RMQ只是一种操作,最大值最小值询问,实现方式一般都是基于ST实现的。当然也有其他的实现。 #include<stdio.h> #include<iostream> #include<math.h> #include<string.h> #include<algorithm> #pragma warning(disable
分类: 其他 发布时间: 05-01 22:52 阅读次数: 0

【HDU 1806】RMQ秒之

1.题目链接。题目大意,给定一个不递减的序列,询问时区间询问,[l.r]种出现最多的数出现了多少次? 2.开始题读错了,以为是让我输出这个数是多少???然后看了一下样例,发现题读错了,行吧,正解可以用权值线段树,最简单那就是RMQ了。做一个C数组,C[i]代表a[i]已经在前边出现了多少次,对于每一个询问,然后首先分割区间,因为我们需要找到一个起点做RMQ,也就是我们找到,一个C[i]=1的地方,左边最大值就是cur-l,右边就是RMQ(cur,r).二者取个最大值即可。 #include
分类: 其他 发布时间: 05-01 22:52 阅读次数: 0

【cf 1108 B】multiset

1.题目链接。给你两个数的所有因子,把这个两个数找出来。十分easy,multiset秒之。 #include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; multiset<int>s; for (int i = 0; i < n; i++) { int c; cin >> c; s.insert(c); } int v = *s.rbegin(); for (int i =
分类: 其他 发布时间: 05-01 22:51 阅读次数: 0