错误:从内部类中访问局部变量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();
}
});
}
}
答案 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)
您的代码就像是,以下思考得到纠正:
您将 count 变量设为静态,因为它是使用静态主方法访问的。
你试图在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();
}
}