Multithreading 多线程:相同的两个对象正在进入同步块

Multithreading 多线程:相同的两个对象正在进入同步块,multithreading,locking,synchronized,Multithreading,Locking,Synchronized,可能是我的标题不正确 我从编程开始了java多线程的概念。因为我已经在同步块中读过了,所以只有一个线程会在一个特定的对象锁上进行交互。但我在看了这个程序的输出后感到困惑。 包com.example.classandobjectlevellock 类MyThread实现可运行 { Object ob=新对象() } 公共类ClassAndObjectLevelLock{ public static void main(String[] args) throws InterruptedExcepti

可能是我的标题不正确

我从编程开始了java多线程的概念。因为我已经在同步块中读过了,所以只有一个线程会在一个特定的对象锁上进行交互。但我在看了这个程序的输出后感到困惑。 包com.example.classandobjectlevellock

类MyThread实现可运行 { Object ob=新对象()

}

公共类ClassAndObjectLevelLock{

public static void main(String[] args) throws InterruptedException {

    MyThread task1 =  new MyThread();
    MyThread task2 =  new MyThread();

    Thread t1 = new Thread(task1,"Thread1");
    Thread t2 = new Thread(task1,"Thread2");

    Thread t3 = new Thread(task2,"Thread3");

    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(1000);
    t3.start();

}
} 输出: 线程1正在等待 线程2正在等待 线程3正在等待

若我并没有错的话,线程1和线程3正在进入同步方法,因为它有两个不同的目标对象。但是为什么线程2会进入同步块呢

请帮助我理解这一点。 提前感谢。

调用
wait()
会释放锁

Per:

使当前线程等待,直到另一个线程调用
notify()
方法或此对象的
notifyAll()
方法。在里面 换句话说,这个方法的行为就像它只是执行 调用
等待(0)

当前线程必须拥有此对象的监视器线程 释放此监视器的所有权并等待另一个线程 通知等待此对象监视器唤醒的线程 通过调用
notify
方法或
notifyAll
方法。这个 然后,线程等待,直到它可以重新获得监视器的所有权和 恢复执行

调用
wait()
会释放锁

Per:

使当前线程等待,直到另一个线程调用
notify()
方法或此对象的
notifyAll()
方法。在里面 换句话说,这个方法的行为就像它只是执行 调用
等待(0)

当前线程必须拥有此对象的监视器线程 释放此监视器的所有权并等待另一个线程 通知等待此对象监视器唤醒的线程 通过调用
notify
方法或
notifyAll
方法。这个 然后,线程等待,直到它可以重新获得监视器的所有权和 恢复执行


请给我一些多线程问题编程的链接。请给我一些多线程问题编程的链接。
public static void main(String[] args) throws InterruptedException {

    MyThread task1 =  new MyThread();
    MyThread task2 =  new MyThread();

    Thread t1 = new Thread(task1,"Thread1");
    Thread t2 = new Thread(task1,"Thread2");

    Thread t3 = new Thread(task2,"Thread3");

    t1.start();
    Thread.sleep(1000);
    t2.start();
    Thread.sleep(1000);
    t3.start();

}