Java對象頭是Java對象的一部分,用于存儲該對象的元數據信息。每個Java對象都有一個對象頭,它包含了對象的標記字、哈希碼以及鎖狀態等信息。對象頭的大小在不同的虛擬機實現中有所不同,通常占用8到12個字節。
AQS(AbstractQueuedSynchronizer)同步器是Java中提供的一種同步機制,它是多線程編程中常用的工具之一。AQS同步器是Java5中新增的一個類,它提供了一些基本的同步操作,如獨占鎖和共享鎖等,可以輕松實現各種同步機制。
public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { // 用于表示同步狀態的volatile int變量,子類需要實現它的相關方法 private transient volatile int state; // AQS等待隊列頭節點 private transient volatile Node head; // AQS等待隊列尾節點 private transient volatile Node tail; // 同步狀態的修改器,通常由AQS的子類實現 protected final void setState(int newState) { state = newState; } // 同步狀態的訪問器,通常由AQS的子類實現 protected final int getState() { return state; } // 將當前線程作為獨占式獲取鎖的等待節點,并將其加入到等待隊列中 protected final boolean acquireQueued(final Node node, int arg) { boolean failed = true; try { boolean interrupted = false; for (;;) { final Node p = node.predecessor(); if (p == head && tryAcquire(arg)) { setHead(node); p.next = null; failed = false; return interrupted; } if (shouldParkAfterFailedAcquire(p, node) && parkAndCheckInterrupt()) interrupted = true; } } finally { if (failed) cancelAcquire(node); } }
總的來說,對象頭是Java運行時數據區中存儲Java對象的元數據信息的部分;而AQS同步器是Java中提供的一種輕量級同步機制,可以方便地實現多線程編程中的各種同步操作。要想更好地理解Java對象頭和AQS同步器,熟悉Java虛擬機的內存模型以及多線程編程基礎知識是必要的。
上一篇java對象和map區別
下一篇php coder 教程