Evgenii Legotckoi
Sept. 26, 2018, 5:53 p.m.

Example - Object Pool in Java

Example of the design pattern An object pool in the Java programming language.


  1. // ObjectPool Class
  2.  
  3. public abstract class ObjectPool<T> {
  4. private long expirationTime;
  5.  
  6. private Hashtable<T, Long> locked, unlocked;
  7.  
  8. public ObjectPool() {
  9. expirationTime = 30000; // 30 seconds
  10. locked = new Hashtable<T, Long>();
  11. unlocked = new Hashtable<T, Long>();
  12. }
  13.  
  14. protected abstract T create();
  15.  
  16. public abstract boolean validate(T o);
  17.  
  18. public abstract void expire(T o);
  19.  
  20. public synchronized T checkOut() {
  21. long now = System.currentTimeMillis();
  22. T t;
  23. if (unlocked.size() > 0) {
  24. Enumeration<T> e = unlocked.keys();
  25. while (e.hasMoreElements()) {
  26. t = e.nextElement();
  27. if ((now - unlocked.get(t)) > expirationTime) {
  28. // object has expired
  29. unlocked.remove(t);
  30. expire(t);
  31. t = null;
  32. } else {
  33. if (validate(t)) {
  34. unlocked.remove(t);
  35. locked.put(t, now);
  36. return (t);
  37. } else {
  38. // object failed validation
  39. unlocked.remove(t);
  40. expire(t);
  41. t = null;
  42. }
  43. }
  44. }
  45. }
  46. // no objects available, create a new one
  47. t = create();
  48. locked.put(t, now);
  49. return (t);
  50. }
  51.  
  52. public synchronized void checkIn(T t) {
  53. locked.remove(t);
  54. unlocked.put(t, System.currentTimeMillis());
  55. }
  56. }
  57.  
  58. //The three remaining methods are abstract
  59. //and therefore must be implemented by the subclass
  60.  
  61. public class JDBCConnectionPool extends ObjectPool<Connection> {
  62.  
  63. private String dsn, usr, pwd;
  64.  
  65. public JDBCConnectionPool(String driver, String dsn, String usr, String pwd) {
  66. super();
  67. try {
  68. Class.forName(driver).newInstance();
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. }
  72. this.dsn = dsn;
  73. this.usr = usr;
  74. this.pwd = pwd;
  75. }
  76.  
  77. @Override
  78. protected Connection create() {
  79. try {
  80. return (DriverManager.getConnection(dsn, usr, pwd));
  81. } catch (SQLException e) {
  82. e.printStackTrace();
  83. return (null);
  84. }
  85. }
  86.  
  87. @Override
  88. public void expire(Connection o) {
  89. try {
  90. ((Connection) o).close();
  91. } catch (SQLException e) {
  92. e.printStackTrace();
  93. }
  94. }
  95.  
  96. @Override
  97. public boolean validate(Connection o) {
  98. try {
  99. return (!((Connection) o).isClosed());
  100. } catch (SQLException e) {
  101. e.printStackTrace();
  102. return (false);
  103. }
  104. }
  105. }

JDBCConnectionPool will allow the application to borrow and return database connections:

  1. public class Main {
  2. public static void main(String args[]) {
  3. // Do something...
  4. ...
  5.  
  6. // Create the ConnectionPool:
  7. JDBCConnectionPool pool = new JDBCConnectionPool(
  8. "org.hsqldb.jdbcDriver", "jdbc:hsqldb://localhost/mydb",
  9. "sa", "secret");
  10.  
  11. // Get a connection:
  12. Connection con = pool.checkOut();
  13.  
  14. // Use the connection
  15. ...
  16.  
  17. // Return the connection:
  18. pool.checkIn(con);
  19.  
  20. }
  21. }

Do you like it? Share on social networks!

МХ
  • Sept. 26, 2018, 7:24 p.m.

аываыв

pasagir
  • Sept. 27, 2018, 3:01 p.m.

Полностью согласен с комментарием выше

Evgenii Legotckoi
  • Sept. 27, 2018, 3:24 p.m.

абыр валг?

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
  • A
    Oct. 19, 2024, 5:19 p.m.
    Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html