实现线程时出错

时间:2015-08-13 16:35:48

标签: java multithreading

错误:从内部类中访问局部变量t需要声明为final并且使用t1.start()从class.same中访问局部变量t1;为什么我要宣布他们是最终的?

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();
            }
        });
    }
}

5 个答案:

答案 0 :(得分:0)

t和t1对象仅限于方法范围,使它们成为成员变量。其次,从方法内部调用方法调用和语句。其中t.start()&amp; t1.start()只是在类内部浮动...同样适用于print语句 也应该从方法内部调用。

答案 1 :(得分:0)

我做了你告诉我真正有用的事情现在它只是显示:System.out.println(&#34; count&#34; + count); 标识符预期加上解析时到达文件末尾

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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();
    }
}

答案 4 :(得分:0)

您的代码就像是,以下思考得到纠正:

  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(); } }