【问题标题】:Getting error while implementing Threads实现线程时出错
【发布时间】:2015-08-13 16:35:48
【问题描述】:

错误:从内部类中访问局部变量 t 需要声明为 final 并且从类中访问局部变量 t1。与 t1.start() 相同;为什么我需要将它们声明为最终的?

public class sync {
    public int count = 0;

    public static void main(String args[]) {
        sync obj = new sync();
        obj.dowork();
        sync obj1 = new sync();
        obj1.dowork1();
        System.out.println(count);
    }

    public void dowork() {
        Thread t = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    count++;
                }
                t.start();
            }
        });
    }

    public void dowork1() {
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    count++;
                }
                t1.start();
            }
        });
    }
}

【问题讨论】:

  • 您的方法声明中有一个错误的分号:public static void main(String args[]);{。之后,缺少分号来终止您初始化 obj 变量的行:sync obj = new sync()
  • 我打错了它不在实际程序中。我编辑了上面的代码
  • 如果您使用实际代码,或者至少是可以编译和运行的代码,将会有所帮助。事实上,很难说出你想用这段代码做什么。最后几行也断了。

标签: java multithreading


【解决方案1】:

我做了你告诉我的真的很有帮助,现在它只是显示:System.out.println("count"+count); 解析时需要标识符加上到达文件末尾

【讨论】:

    【解决方案2】:

    t 和 t1 对象仅限于方法的范围,使它们成为成员变量。其次,方法调用和语句是从方法内部调用的。这里 t.start() 和 t1.start() 只是在类内部浮动... print 语句也是如此 也应该从方法内部调用。

    【讨论】:

      【解决方案3】:

      应该在线程 (t,t1) 初始化之后调用 start 方法。目前它们在初始化过程中使用。 应该是这样的:

      public void dowork(){
      Thread t=new Thread (new Runnable (){
      public void run(){
      for (int i=0;i<1000;i++){
      count++;}
      }});
      t.start();
      }
      

      另外 count 应该是一个静态变量,因为您不能从静态 main 方法中引用非静态变量。

      【讨论】:

        【解决方案4】:

        您的代码如下,以下认为已更正:

        1. 您将 count 变量设为静态,因为它是在静态主方法中访问的。

        2. 你试图在 run 方法中调用 Thread.start 是错误的,因为 Thread.start 方法会调用 run 方法。

          public class sync {
                  public static int count = 0;
          
                  public static void main(String args[]) {
                      sync obj = new sync();
                      obj.dowork();
                      sync obj1 = new sync();
                      obj1.dowork1();
                      System.out.println(count);
                  }
          
                  public void dowork() {
                      Thread t = new Thread(new Runnable() {
                          public void run() {
                              for (int i = 0; i < 1000; i++) {
                                  count++;
                              }
                          }
                      });
                      t.start();
                  }
          
                  public void dowork1() {
                      Thread t1 = new Thread(new Runnable() {
                          public void run() {
                              for (int i = 0; i < 1000; i++) {
                                  count++;
                              }
                          }
          
                      });
                      t1.start();
                  }
              }
          

        【讨论】:

          【解决方案5】:
          public class sync {
              static int count = 0;
          
              public static void main(String args[]) {
                  sync obj = new sync();
                  obj.dowork();
                  sync obj1 = new sync();
                  obj1.dowork1();
                  System.out.println(count);
              }
          
              public void dowork() {
                  Thread t = new Thread(new Runnable() {
                      public void run() {
                          for (int i = 0; i < 1000; i++) {
                              count++;
                          }
                      }
                  });
                  t.start();
              }
          
              public void dowork1() {
                  Thread t1 = new Thread(new Runnable() {
                      public void run() {
                          for (int i = 0; i < 1000; i++) {
                              count++;
                          }
                      }
                  });
                  t1.start();
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-07
            • 2016-10-13
            • 2014-12-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多