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;i
synchronized
没有明确的目标意味着
synchronized(this)
:每个线程都在自身进行同步,因此没有冲突。如果要序列化它们,可以使用
synchronized(PrintNums.class)


请注意,通常有一个比使用显式线程更好的构造,例如执行器或闩锁。

synchronized
没有显式目标意味着
synchronized(这)
:每个线程都在自身上同步,因此没有冲突。如果要序列化它们,可以使用
synchronized(PrintNums.class)


请注意,通常有比使用显式线程更好的构造,例如执行器或闩锁。

同步用于访问特定对象(即同步到一个对象)。您有两个不同的对象(
奇数
偶数
)。同步用于访问特定对象(即,同步到一个对象)。您有两个不同的对象(
奇数
偶数
)。谢谢您的解释,我想我现在明白原因了!谢谢您的解释,我想我现在明白原因了!