< prev index next > src/hotspot/share/runtime/objectMonitor.hpp
Print this page
volatile TStates TState;
volatile bool _notified;
bool _is_wait;
bool _at_reenter;
bool _interrupted;
+ bool _interruptible;
bool _do_timed_park;
bool _active; // Contention monitoring is enabled
public:
ObjectWaiter(JavaThread* current);
ObjectWaiter(oop vthread, ObjectMonitor* mon);
// along with other fields to determine if an ObjectMonitor can be
// deflated. It is also used by the async deflation protocol. See
// ObjectMonitor::deflate_monitor().
int64_t _unmounted_vthreads; // Number of nodes in the _entry_list associated with unmounted vthreads.
// It might be temporarily more than the actual number but never less.
+ OopHandle _object_strong; // Used to protect object during preemption on class initialization
ObjectWaiter* volatile _wait_set; // LL of threads waiting on the monitor - wait()
volatile int _waiters; // number of waiting threads
volatile int _wait_set_lock; // protects wait set queue - simple spinlock
+ volatile int _object_strong_lock; // protects setting of _object_strong
public:
static void Initialize();
static void Initialize2();
oop object() const;
oop object_peek() const;
bool object_is_dead() const;
bool object_refers_to(oop obj) const;
+ void set_object_strong();
// Returns true if the specified thread owns the ObjectMonitor. Otherwise
// returns false and throws IllegalMonitorStateException (IMSE).
bool check_owner(TRAPS);
void entry_list_build_dll(JavaThread* current);
void unlink_after_acquire(JavaThread* current, ObjectWaiter* current_node);
ObjectWaiter* entry_list_tail(JavaThread* current);
bool vthread_monitor_enter(JavaThread* current, ObjectWaiter* node = nullptr);
! void vthread_wait(JavaThread* current, jlong millis);
bool vthread_wait_reenter(JavaThread* current, ObjectWaiter* node, ContinuationWrapper& cont);
void vthread_epilog(JavaThread* current, ObjectWaiter* node);
enum class TryLockResult { Interference = -1, HasOwner = 0, Success = 1 };
void entry_list_build_dll(JavaThread* current);
void unlink_after_acquire(JavaThread* current, ObjectWaiter* current_node);
ObjectWaiter* entry_list_tail(JavaThread* current);
bool vthread_monitor_enter(JavaThread* current, ObjectWaiter* node = nullptr);
! void vthread_wait(JavaThread* current, jlong millis, bool interruptible);
bool vthread_wait_reenter(JavaThread* current, ObjectWaiter* node, ContinuationWrapper& cont);
void vthread_epilog(JavaThread* current, ObjectWaiter* node);
enum class TryLockResult { Interference = -1, HasOwner = 0, Success = 1 };
< prev index next >