我有一个实现runnable的线程类和一个int计数器作为实例变量.两个同步方法添加和子.当我以某种方式运行我的测试类时,它会在几次打印错误的结果.据我所知,当一个方法同步时,整个对象将被锁定以供其他线程访问,每当我们得到相同的结果时,这个逻辑是什么?有些情况并非如此.我错过了什么吗?
我的机器是Windows 7,64位.
public class ThreadClass implements Runnable {
int counter = 0;
@Override
public void run() {
add();
sub();
}
public synchronized void add() {
System.out.println("ADD counter" + (counter = counter + 1));
}
public synchronized void sub() {
System.out.println("SUB counter" + (counter = counter - 1));
}
}
Run Code Online (Sandbox Code Playgroud)
识别TestClass
public class ThreadTest {
public static void main(String args[]) {
ThreadClass tc = new ThreadClass();
Thread tc0 = new Thread(tc);
tc0.start();
tc0.setPriority(Thread.MAX_PRIORITY);
Thread tc1 = new Thread(tc);
tc1.start();
tc1.setPriority(Thread.NORM_PRIORITY); …Run Code Online (Sandbox Code Playgroud)