先明确几点:
1、所有synchronized修饰的非静态方法用的都是同一把锁:实例对象本身
2、所有synchronized修饰的静态方法用的都是同一把锁:类对象本身
3、而对于同步块,由于其锁是可以选择的,所以只有使用同一把锁的同步块之间才有着竞态条件
【求你将我放在你心上如印记,带在你臂上如戳记。因为爱情如死之坚强,嫉恨如阴间之残忍。】 —— 圣经.雅歌 8.6
先明确几点:
1、所有synchronized修饰的非静态方法用的都是同一把锁:实例对象本身
2、所有synchronized修饰的静态方法用的都是同一把锁:类对象本身
3、而对于同步块,由于其锁是可以选择的,所以只有使用同一把锁的同步块之间才有着竞态条件
先上一张图,这是我找到的最好的一张了。
从图来看,我们可以把Java内存区分为堆内存(Heap)和栈内存(Stack)。虽然这种分法比较粗糙,实际上要复杂的多,不过初学者来说这是我们最关注的的两块区域。
LRU(Least Recently Used)是一种常见的页面置换算法,在计算中,所有的文件操作都要放在内存中进行,然而计算机内存大小是固定的,所以我们不可能把所有的文件都加载到内存,因此我们需要制定一种策略对加入到内存中的文件进项选择。
描述:矩阵中的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。
eg:下面3 x 4的矩阵中包含一条字符串”bcced”的路径,但矩阵中不包含”abcd”的路径。
a b c e
s f c s
a d e e
比较排序和非比较排序: