Java 为什么我的线程在使用';已同步';?
我使用Java 为什么我的线程在使用';已同步';?,java,multithreading,synchronization,Java,Multithreading,Synchronization,我使用synchronized来执行第一个线程,然后在第一个线程完成时执行另一个线程,但两个线程同时执行。为什么? public class PrintNums extends Thread { int num; public PrintNums(int x) { this.num = x; } @Override public void run() { this.count(); } public
synchronized
来执行第一个线程,然后在第一个线程完成时执行另一个线程,但两个线程同时执行。为什么?
public class PrintNums extends Thread {
int num;
public PrintNums(int x) {
this.num = x;
}
@Override
public void run() {
this.count();
}
public synchronized void count() {
for (int i = 1; i <= 5; i++) {
System.out.println((2 * i - this.num));
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException ex) {
}
}
}
public static void main(String[] args) {
PrintNums odd = new PrintNums(1);
PrintNums even = new PrintNums(0);
odd.start();
even.start();
}
}
公共类PrintNums扩展线程{
int-num;
公共PrintNums(int x){
this.num=x;
}
@凌驾
公开募捐{
这个。count();
}
公共同步的无效计数(){
对于(int i=1;isynchronized
没有明确的目标意味着synchronized(this)
:每个线程都在自身进行同步,因此没有冲突。如果要序列化它们,可以使用synchronized(PrintNums.class)
请注意,通常有一个比使用显式线程更好的构造,例如执行器或闩锁。synchronized
没有显式目标意味着synchronized(这)
:每个线程都在自身上同步,因此没有冲突。如果要序列化它们,可以使用synchronized(PrintNums.class)
请注意,通常有比使用显式线程更好的构造,例如执行器或闩锁。同步用于访问特定对象(即同步到一个对象)。您有两个不同的对象(奇数
和偶数
)。同步用于访问特定对象(即,同步到一个对象)。您有两个不同的对象(奇数
和偶数
)。谢谢您的解释,我想我现在明白原因了!谢谢您的解释,我想我现在明白原因了!