publicint[] intersection(int[] nums1, int[] nums2) { // 大小是 1000 的数组,如果没有提示的条件就没法这么做 // define a array which size is 1000, and can not be done like this without the condition in notice int[] inter = newint[1000]; int[] outer; intm=0; for (int j : nums1) { // 这里得是设置成 1,因为有可能 nums1 就出现了重复元素,如果直接++会造成结果重复 // need to be set 1, cause element in nums1 can be duplicated inter[j] = 1; } for (int j : nums2) { if (inter[j] > 0) { // 这里可以直接+1,因为后面判断只需要判断大于 1 // just plus 1, cause we can judge with condition that larger than 1 inter[j] += 1; } } for (inti=0; i < inter.length; i++) { // 统计下元素数量 // count distinct elements if (inter[i] > 1) { m++; } } // initial a array of size m outer = newint[m]; m = 0; for (inti=0; i < inter.length; i++) { if (inter[i] > 1) { // add to outer outer[m++] = i; } } return outer; }
/** * <p>Concurrent sequence class used for tracking the progress of * the ring buffer and event processors. Support a number * of concurrent operations including CAS and order writes. * * <p>Also attempts to be more efficient with regards to false * sharing by adding padding around the volatile field. */ publicclassSequenceextendsRhsPadding {
通过代码可以看到,sequence 中其实真正有意义的是 value 字段,因为需要在多线程环境下可见也 使用了volatile 关键字,而 LhsPadding 和 RhsPadding 分别在value 前后填充了各 7 个 long 型的变量,long 型的变量在 Java 中是占用 8 bytes,这样就相当于不管怎么样, value 都会单独使用一个缓存行,使得其不会产生 false sharing 的问题。