我试图掌握Java中同步方法的概念,但是至少在我看来遇到了令人困惑的行为。
在代码中:
public class parallelUpdate
{
public static void main(String[] args)
{
Ob ob = new Ob();
new Thread(ob).start();
new Thread(ob).start();
}
}
class Ob implements Runnable
{
static int cnt = 0;
private synchronized void inc()
{
cnt++;
}
@Override
public void run()
{
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread());
inc();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
...增量由两个胎面并行执行:
Thread[Thread-0,5,main]
Thread[Thread-1,5,main]
Thread[Thread-0,5,main]
Thread[Thread-1,5,main]
Thread[Thread-1,5,main]
Thread[Thread-0,5,main]
Thread[Thread-0,5,main]
Thread[Thread-1,5,main]
我希望对inc()方法使用synced会产生顺序递增,例如:
Thread[Thread-0,5,main]
Thread[Thread-0,5,main]
Thread[Thread-0,5,main]
Thread[Thread-0,5,main]
Thread[Thread-0,5,main]
Thread[Thread-1,5,main]
Thread[Thread-1,5,main]
Thread[Thread-1,5,main]
Thread[Thread-1,5,main]
Thread[Thread-1,5,main]
我的代码有什么问题?
最佳答案
请找到正确的代码:
public class parallelUpdate {
public static void main(String[] args) {
Ob ob = new Ob();
new Thread(ob).start();
new Thread(ob).start();
}
}
class Ob implements Runnable {
static int cnt = 0;
private synchronized void inc() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread());
cnt++;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
inc();
}
}
针对您的代码的说明:-
您正在制作inc();方法作为已同步,但它们对于
**for loop**
不同步,因此您的两个脚踏板进入并执行inc();
同步操作。