学习

解决方案 »

  1.   

    使用satatic是方便了一点,但不是太安全吧
      

  2.   

    会,
    应该用CLASS 或者SESSION
      

  3.   

    最上面是界面层,数据访问都用存储过程,其上面层有个数据访问公共类(其中的方法都是static静态方法),用来调用存储过程,再上面也就是界面层的下面层各函数(也是静态方法static),用来调用数据访问公共类中的静态方法.当我数据访问量非常大时,会不会由于STATIC产生并发,冲掉一些数据访问请求。请大家提供点意见?是全部用static好,还是全部去掉好?他们有什么优缺点?
      

  4.   

    我觉得 不能全部用 static !
      

  5.   

    把数据访问公共类中的STATIC去掉,而把调用他们的方法留着static,怎么样?
      

  6.   

    我写了个多线程..用了个static 传递变量好象没事啊
      

  7.   

    在一个static函数中,lock一个对象就可以了。这样,再忙都不会出现在一个函数出现并发。我测试过的
      

  8.   

    class abc{
       static object lockTest=new Object();   static function void Test(){
         lock(lockTest)
         {
            //你的代码。
         }
       }
    }这样,即使在Test()中被多个线程同时调用,但是扫行(你的代码)是,由于lock语句的存在,仍然会是单线程运行。后来的线程,会被lock(lockTest)这一句给阻赛到上一个线程把(你的代码)执行完。
      

  9.   

    多用户同时调用静态函数,会产生多个进程,本身是不会冲突的。
    但静态函数访问了同一静态变量时就要使用lock语句。
      

  10.   

    如果仅仅使用static方法而没有static变量的话是不会有问题的,一般线程安全的问题都是针对变量访问时发生冲突所造成的。
      

  11.   

    用static的时候,当多个client用的时候会有冲突的,用lock效率比较差,容易引起死琐,造成系统崩溃,lock 用于多线程总为了便于不让资源使用发生冲突而设计的
      

  12.   

    lock的使用中,死锁会出现在一个情况:A线程 lock(A),然后不释放A,lock(B)B线程 lock(B),然后不释放B,lock(A)如果在线程中,不使用lock(A){
      lock(B){
      }
    }的模式,而只使用单个的lock,我想不出死锁出现的理论。
      

  13.   

    晕倒,你自己做一段代码测试一下不就可以了吗?????总之,我现在做的第一个程序,目前底层网络通信已经写了2000多行,测试通过。扔一段我测试lock的代码出来,你自己看吧,能不能看懂,就看你的水平了 long addValue;
    object lockk=new object();
    private void button3_Click(object sender, System.EventArgs e)
    {
    this.textBox3.Text="";
    for (int i=0;i<20;i++)
    {
    System.Threading.Thread th=new System.Threading.Thread(new System.Threading.ThreadStart(add));
    th.Start();
    }
    } private void add()
    {
    int startTick=System.Environment.TickCount;
    for (int i=0;i<500000;i++)
    {
    for (int j=0;j<100;j++);
    //lock(lockk)
    //{
    this.addValue+=1;
    //}
    }
    lock(lockk)
    {
    this.textBox3.Text+=(System.Environment.TickCount-startTick).ToString()+";"+this.addValue.ToString()+"   ";
    }
    }
      

  14.   

    你可以看看,被注释的lock那一段,用和不用的区别
      

  15.   

    http://community.csdn.net/Expert/topic/4158/4158509.xml?temp=.6570093
      

  16.   

    应该没问题.哦一直用的都是static方法.
      

  17.   

    我也有同样的问题,我是在web方法中调用的static方法.我简单试了一下没什么问题.但不知到具体运行时会不会有什么问题,大家接着讨论.
      

  18.   

    如果你的static里面没有访问和操作某些可能产生冲突的对象的话,就绝对没有问题,因为多人在用这个函数的时候,可能会同时操作同一个对象,引起冲突,这样会造成灾难,解决方法,给可能引起冲突的对象加
    lock(obj)
    {} 副作用:可能引起暂时某个或者某些用户响应迟缓等等
      

  19.   

    不用static 的话,就要创建事例,耗资源,当然一个无所谓,但当多了,就明显了,最好把这些方法封到业务逻辑的基类,这样就可以避免些问题
      

  20.   

    静态方法
    通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。如下所示:
    class Simple{
       static void go(){
            System.out.println("Go...");
        }
    }
    public class Cal{
      public static void main(String[] args){
         Simple.go();
      }
    }
    调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。
    静态变量
    静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间.
    class Value{
     static int c=0;
     static void inc(){
     c++;
      }
    }
    class Count{
      public static void prt(String s){
        System.out.println(s);
      }
      public static void main(String[] args){
        Value v1,v2;
        v1=new Value();
        v2=new Value();
        prt("v1.c="+v1.c+"  v2.c="+v2.c);
        v1.inc();
        prt("v1.c="+v1.c+"  v2.c="+v2.c);  
      }
    }
    结果如下:
    v1.c=0  v2.c=0
    v1.c=1  v2.c=1
    由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。
    静态类
    通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示:
    public class StaticCls{
      public static void main(String[] args){
        OuterCls.InnerCls oi=new OuterCls.InnerCls();
      }
    }
    class OuterCls{
      public static class InnerCls{
        InnerCls(){
          System.out.println("InnerCls");
        }
       }
    }
    输出结果会如你所料:
    InnerCls
    和普通类一样。
    详细说明网址:
    http://kb.csdn.net/java/articles/200503/e7563d5f-f3d8-4d9e-8f15-21e54feff5ad.html