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