1 
   2 /*
   3 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
   4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 *
   6 * This code is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License version 2 only, as
   8 * published by the Free Software Foundation.
   9 *
  10 * This code is distributed in the hope that it will be useful, but WITHOUT
  11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13 * version 2 for more details (a copy is included in the LICENSE file that
  14 * accompanied this code).
  15 *
  16 * You should have received a copy of the GNU General Public License version
  17 * 2 along with this work; if not, write to the Free Software Foundation,
  18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19 *
  20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21 * or visit www.oracle.com if you need additional information or have any
  22 * questions.
  23 *
  24 */
  25 
  26 #ifndef SHARE_SERVICES_THREADTABLE_HPP
  27 #define SHARE_SERVICES_THREADTABLE_HPP
  28 
  29 #include "memory/allocation.hpp"
  30 
  31 class JavaThread;
  32 class ThreadsList;
  33 class ThreadTableConfig;
  34 
  35 class ThreadTable : public AllStatic {
  36   friend class ThreadTableConfig;
  37 
  38   static volatile bool _has_work;
  39   static volatile bool _is_initialized;
  40   
  41   public:
  42     // Initialization
  43     static void lazy_initialize(const ThreadsList *threads);
  44     static bool is_initialized() { return _is_initialized; }
  45 
  46     // Lookup and inserts
  47     static JavaThread* find_thread_by_tid(jlong tid);
  48     static JavaThread* add_thread(jlong tid, JavaThread* thread);
  49     static bool remove_thread(jlong tid);
  50   
  51     // Growing
  52     static bool has_work() { return _has_work; }
  53     static void do_concurrent_work(JavaThread* jt);
  54 
  55   private:
  56     static void create_table(size_t size);
  57 
  58     static size_t table_size();
  59     static double get_load_factor();
  60     static void check_concurrent_work();
  61     static void trigger_concurrent_work();
  62     static void grow(JavaThread* jt);
  63 
  64     static void item_added();
  65     static void item_removed();
  66 };
  67 
  68 #endif // SHARE_SERVICES_THREADTABLE_HPP