dedecms 建两个网站的问题,可信网站必须做吗,大连制作企业网站,网站排版用什么软件每个 Java 对象都可以关联一个 Monitor 对象#xff0c;如果使用 synchronized 给对象上锁#xff08;重量级#xff09;之后#xff0c;该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。
Monitor组成内容
EntryList#xff08;入口列表#xff09;
当一个线…
每个 Java 对象都可以关联一个 Monitor 对象如果使用 synchronized 给对象上锁重量级之后该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。
Monitor组成内容
EntryList入口列表
当一个线程请求进入一个被锁定的对象时它会被放置在EntryList中等待获取对象的锁。一旦对象的锁被释放EntryList中的线程将会竞争锁的所有权。
WaitSet等待集
WaitSet用于存放因等待某个条件而被阻塞的线程。当一个线程调用对象的wait()方法时它会释放锁并进入等待集直到其他线程调用notify()或notifyAll()方法来唤醒它。
Owner所有者
Owner是当前拥有对象锁的线程。在任何时刻只有一个线程可以成为对象锁的所有者。 刚开始 Monitor 中 Owner 为 null
当 Thread-2 执行 synchronized(obj) 就会将 Monitor 的所有者 Owner 置为 Thread-2Monitor中只能有一 个 Owner
在 Thread-2 上锁的过程中如果 Thread-3Thread-4Thread-5 也来执行 synchronized(obj)就会进入 EntryList BLOCKED
Thread-2 执行完同步代码块的内容然后唤醒 EntryList中等待的线程来竞争锁竞争的时是非公平的
图中WaitSet中的Thread-0Thread-1是获取获后调用了object对象的wait()方法进入waiting中进行等待