java吧 关注:1,231,159贴子:12,695,570
  • 25回复贴,共1

高中学历的搞软件开发的高手应该很多吧

只看楼主收藏回复

............................................................................
想建个软件开发与学习交流群, 只招一些高中或者高中以下学历的高手, 不知道靠谱么?


1楼2012-12-23 19:33回复
    看不起做软件的怎么了?


    3楼2012-12-23 20:06
    回复
      好吧, 你帮我深入阐述下volatile 吧。 刚学反射看到的。
      import java.lang.reflect.Field; import java.lang.reflect.Modifier; import static java.lang.System.out; enum Spy { BLACK , WHITE } public class FieldModifierSpy { volatile int share; int instance; class Inner {} public static void main(String... args) { try { Class<?> c = Class.forName(args[0]); int searchMods = 0x0; for (int i = 1; i < args.length; i++) { searchMods |= modifierFromString(args[i]); } Field[] flds = c.getDeclaredFields(); out.format("Fields in Class '%s' containing modifiers: %s%n", c.getName(), Modifier.toString(searchMods)); boolean found = false; for (Field f : flds) { int foundMods = f.getModifiers(); // Require all of the requested modifiers to be present if ((foundMods & searchMods) == searchMods) { out.format("%-8s [ synthetic=%-5b enum_constant=%-5b ]%n", f.getName(), f.isSynthetic(), f.isEnumConstant()); found = true; } } if (!found) { out.format("No matching fields%n"); } // production code should handle this exception more gracefully } catch (ClassNotFoundException x) { x.printStackTrace(); } } private static int modifierFromString(String s) { int m = 0x0; if ("public".equals(s)) m |= Modifier.PUBLIC; else if ("protected".equals(s)) m |= Modifier.PROTECTED; else if ("private".equals(s)) m |= Modifier.PRIVATE; else if ("static".equals(s)) m |= Modifier.STATIC; else if ("final".equals(s)) m |= Modifier.FINAL; else if ("transient".equals(s)) m |= Modifier.TRANSIENT; else if ("volatile".equals(s)) m |= Modifier.VOLATILE; return m; } }


      4楼2012-12-23 20:08
      收起回复
        网上文章不是一大把吗……
        在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。

        一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。


        IP属地:湖北5楼2012-12-23 20:31
        收起回复
          该贴会带来初步的启发:
          http://www.iteye.com/topic/213794
          volatile的具体使用, 需要在实践中通过多线程测试来验证。


          6楼2012-12-23 20:34
          回复
            本质无非是, 在32bit操作系统上, 读写long或double型变量, 需要2次读写操作, 多线程的情况下, 可能会打断高位和地位读写操作的连续性。[$1]volatile的作用可能是为高位与低位读写加锁而已, 来保证他们读写的连续性


            7楼2012-12-23 20:37
            收起回复
              我悟了, 好了, 目前这种自圆其说的解释已经说服了我。


              8楼2012-12-23 20:39
              收起回复
                从2位同学身上受到了启发, 不错


                9楼2012-12-23 20:41
                回复
                  无非告诉编译器不要优化老子,老子的代码就是要直接读这个,不要自作主张cache


                  11楼2012-12-23 20:47
                  收起回复
                    百度了一篇: 浅谈java内存模型


                    12楼2012-12-23 20:54
                    回复