1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。2、请列举出java用于线程同步的各种技术(如synchronized关键字),说出他们的区别。3、写一个函数计算一个32位整数中有多少Bit位为1public int countBits(int value){}

解决方案 »

  1.   

    2.synchronized有两中实现方法吧,一个是在方法或属性前加关键字
    还有一个synchronized block是用来解决第三方提供的方法与属性的同步问题的
      

  2.   


    还是用了synchronized关键字啊,有没有不用synchronized的技术呢?
      

  3.   

    3、
        public int countBits(int value){ 
         int count=0;
         while(value!=0){
         count+=value&1;
         value>>>=1;
         }
         return count;
        }
      

  4.   

    3、这个更高效
        public int countBits(int value){ 
         int count=0;
         int[] bits4={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4};
         while(value!=0){
         count+=bits4[value&0xf];
         value>>>=4;
         }
         return count;
        }
      

  5.   

    还可以使用wait与notify
    至于区别还是查一查吧
      

  6.   

    1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。这个问题怎么没有人回答?
      

  7.   


    如果给出写好的bits32的话,直接通过bits32[value&0xffffffff]就可以得出来,这样应该是效率最快。
      

  8.   

    1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。 静态变量是JVM级别的,所以能在同一个WebServer中的多个WEBAPP中共享
      

  9.   


    一个类的静态变量不可以在同一个WebServer中的多个WebApp中共享的吧。
    因为不同的WebApp有不同的逻辑,如果其中一个WebApp改变了这个变量势必会影响到其的WebApp,这样所造成的结果是无法预见的。
    这是从逻辑上来分析,那么从技术的角度应该怎么分析呢?哪位大虾有好的想法?
      

  10.   

    wait notifly,sleep 线程同步
      

  11.   


    public class Test{
    public static void main(String[] args) {
    System.out.println(countBits(3));
    }
    public static int countBits(int countValue){
    int count=0;
    while (countValue!=0) {
    ++count;
    countValue=countValue>>1;
    }
    return count;
    }
    }
      

  12.   


    一个类的静态变量在整个JVM环境下只有一个实例,同一个WEBSERVER使用的肯定是同一个JVM,所以在该JVM下所有的应用访问的是同一个值。
      

  13.   

    一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。 
    好像能不能共享是private,public...等东西来确定的吧。和static什么关系。
      

  14.   

    是同属于在同一个JVM下面发布,能保证在同一个JVM实例里面吗?
      

  15.   

    1、一个类的静态变量能在同一个WebServer中的多个WebApp中共享么?请说明原因。这个问题我试过了,不能共享。
    创建一个web项目test,写一个类 test.Test.javapackage test
    public class Test{
        public static String TEST = null;
    }
    test.jsp<%@ page contentType="text/html; charset=utf-8" %>
    <%@ page import="test.*" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Test</title>
    </head><body>
    <%
    if(Test.TEST == null){
      Test.TEST = new java.util.Date().toString();
    }
    out.println(Test.TEST);
    %></body>
    </html>
    然后把它作为两个项目布暑到tomcat中,一个是test1,一个是test2,分别运行它们,最终得到的打印结果是不一样的,说明两个项目中的 Test.TEST 有值不同,故不能共享!
      

  16.   

    不过,如果把 test.Test.class 把成 jar 包放在tomcat的lib目录下,两个页面运行后所得到的打印结果是一样的。这时这两个项目就共享了Test.TEST
      

  17.   

    有点强词夺理了,bits32有2^32种变化.和计算机叫劲了.bits4可以闭着眼写出来.
      

  18.   

    不能用>>啊,负数就麻烦了,死循环了。
      

  19.   

    对wxwyes的例子的一点补充:
    package test;
    public class Test{
       public static final int a=0;
       public Test(){
          System.out.println(Test.class.getClassLoader().getClass().getName());
       }
    }
    jsp中引用的时候:
    <%
      out.println(new test.Test().a
    %>
    在构造函数中把类装载器打印出来。
    结果发现,当放在tomcat的lib目录下面的时候,打印:org.apache.catalina.loader.StandardClassLoader
    当放在某一个工程下面的classes下面的时候,打印:
    org.apache.catalina.loader.WebappClassLoader
    既然不是由同一个类装载器载入的,肯定不可以共享。但是,在同一个类装载器内部,
    应该只有一个静态变量。
      

  20.   

    1.是可以共享的.以tomcat为例,它支持多个层次的类加载器.其中有shared类型加载器,其加载的类在所有webapps下的项目都可见.把类的class文件放在shared/classes目录下即可.
      

  21.   

    1.可以共享。
    2.synchronized wait和notify()
    3.
      

  22.   


    正解,这个题目太高深了,即要理解static的访问原理,又要裂解tomcat的类装在机制。这2个知识点没有深如学习都是接触不到。想问楼主面试什么职位,面试问题如此高深。
      

  23.   

    忘记说明了 你那个第2题有点歧义
    如果说是线程同步的方法应该就是 sychronized 和lock 这个区别就是 lock比sychronized有更精确的线程语义和更好的性能  stchronized会自动释放锁 
    lock 必须手动释放  必须在finally里面释放  
    如果说同步的几种实现方法 就应该是2种 一种是 sychronized 一种就是 wait()与notify()
      

  24.   

    楼上的达人说到wait(),notify()可以实现线程同步,是如何实现的?能给个例子吗?
      

  25.   


    我面试的是资深java软件工程师1W以上的职位
      

  26.   


    不好意思,刚才引用错了,我面试的是资深java软件工程师,1W以上的职位。
      

  27.   

    执行到一个main方法的时候创建一个jvm,
    不同的webapp应该理解为是不同的main方法
    所以应该是不同的jvm,
    所以就算时static的也不能共享。
    (个人见解)
      

  28.   

     是否可以用static    提供一个 静态方法... 这样就可以不用 synchronized 
      

  29.   

    1.我原来以为可以...看了大家的回帖,才知道不可以.
    2.除了sychronized,还有volatile变量可以控制同步.
      

  30.   

    1  我认为应该是不可以的..多个WebApp 的静态变量能互相共享?  那还了得... 
      

  31.   

    小弟才疏学浅,斗胆请教,如何不用synchornized同步线程?能给个例子吗?我google了几下,没有找到不用synchornized同步的方法。谢谢
      

  32.   


    static int getResult(int n){
    int count = 0;
    while(n != 0){
    count ++;
    n = n & (n-1);
    }

    return count;
    }
    编程之美
      

  33.   


    tomcat 6.0 下没有 shared 目录了
      

  34.   

    本人认为,不同的项目tomcat都为其创建一个类加载器(org.apache.catalina.loader.WebappClassLoader )的实例,不同的类加载器实例之间不能共享资源
      

  35.   


    没有就放common/classes下面.
    如果不能共享,目录名就没必要叫common,shared了.
      

  36.   

    学习了。
    1.可以,静态变量在一个WebApplication中应该只有一份
    2.synchronized,notify,sleep,waited
    3.