単純なJava名ベースのロック?

ワーペット:

MySQLには便利な機能があります。

SELECT GET_LOCK("SomeName")

これを使用して、アプリケーションの単純であるが非常に具体的な名前ベースのロックを作成できます。ただし、データベース接続が必要です。

私には次のような多くの状況があります。

someMethod() {
    // do stuff to user A for their data for feature X
}

このメソッドを単に同期するだけでは意味がありません。たとえば、この間にユーザーBに対してこのメ​​ソッドが呼び出された場合、ユーザーBは、ユーザーAが終了するのを待つ必要がなく、ユーザーの操作のみを開始します。 Aと機能Xの組み合わせは待つ必要があります。

MySqlロックを使用すると、次のようなことができます。

someMethod() {
    executeQuery("SELECT GET_LOCK('userA-featureX')")
    // only locked for user A for their data for feature X
    executeQuery("SELECT RELEASE_LOCK('userA-featureX')")
}

Javaロックはオブジェクトに基づいているため、このロックの状況を表す新しいオブジェクトを作成し、静的キャッシュに配置して、すべてのスレッドが参照できるようにする必要があるようです。その状況でロックする後続の要求は、キャッシュ内でロックオブジェクトを見つけ、そのロックを取得します。このようなものを作成しようとしましたが、ロックキャッシュ自体を同期する必要があります。また、ロックオブジェクトがキャッシュから削除できるように使用されなくなったことを検出することは困難です。

私はJava並行パッケージを見てきましたが、このようなものを処理できることで目立つものはありません。これを実装する簡単な方法はありますか、それとも間違った視点から見ていますか?

編集:

明確にするために、事前に定義されたロックのプールを事前に作成するつもりはありません。オンデマンドで作成したいと思います。私が考えていることのいくつかの疑似コードは次のとおりです:

LockManager.acquireLock(String name) {
    Lock lock;  

    synchronized (map) {
        lock = map.get(name);

        // doesn't exist yet - create and store
        if(lock == null) {
            lock = new Lock();
            map.put(name, lock);
        }
    }

    lock.lock();
}

LockManager.releaseLock(String name) {
    // unlock
    // if this was the last hold on the lock, remove it from the cache
}
ぼくの:

多分これはあなたにとって便利です:jkeylockmanager

編集:

私の最初の反応はおそらく少し短かったです。私は著者であり、この問題に何度か直面し、既存の解決策を見つけることができませんでした。そのため、この小さなライブラリをGoogle Codeで作成しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javaロギングフォーマッタに単純なクラス名を使用します

分類Dev

単純な Java ベースの Spark プログラムが完了しない

分類Dev

単純な単語ロケーター関数の「レベル1にそのようなインデックスはありません」構文エラー

分類Dev

スレッドからの単純なベクトルの出力

分類Dev

Javaコンストラクターと単純なセッターでのパラメーターの命名のベストプラクティス

分類Dev

Javaの単純なデータベースのようなコレクションクラス

分類Dev

単純なユースケースのクロージャ

分類Dev

C ++とPython間の単純なIPC(クロスプラットフォーム)

分類Dev

C ++とPython間の単純なIPC(クロスプラットフォーム)

分類Dev

Pythonでの単純なロジスティック回帰エラー

分類Dev

jsの単純なスロットル

分類Dev

単純なオブジェクト検証のためのプロパティベースのテスト

分類Dev

Linuxx86_64での単純なスタックオーバーフローエクスプロイト

分類Dev

Pythonの単純なプロセスベースの並列マップはありますか?

分類Dev

スレッドロックの順序と単純な同期ブロック

分類Dev

Javaの単純な抽象クラス

分類Dev

Tensorflow:チェックポイントの単純なロード

分類Dev

JavaでCPUベースのタスクを実行する単純なプログラムの最適なスレッドプールサイズは何ですか

分類Dev

JAVAでのバットの単純なコードロジックのコーディング

分類Dev

Javaの単純なjsonがデータベースからデータをフェッチして表示する

分類Dev

ルールの書き換え、ホスト名チェックでの単純なOR

分類Dev

Java の単純なコールバック

分類Dev

単純なコマンドラインベースのPythonプロジェクトを構築する方法

分類Dev

単純なタスクでプロローグの同等性チェックが失敗する

分類Dev

単純なタスクでプロローグの同等性チェックが失敗する

分類Dev

Javaでの時間ベースのロジックの単体テスト

分類Dev

ルビーでデッドロックを与える単純なスレッド条件変数の例

分類Dev

tqdmが利用できない場合の単純なフォールバックプログレスバー

分類Dev

単純なデータセットへのロジスティック回帰の適用

Related 関連記事

  1. 1

    Javaロギングフォーマッタに単純なクラス名を使用します

  2. 2

    単純な Java ベースの Spark プログラムが完了しない

  3. 3

    単純な単語ロケーター関数の「レベル1にそのようなインデックスはありません」構文エラー

  4. 4

    スレッドからの単純なベクトルの出力

  5. 5

    Javaコンストラクターと単純なセッターでのパラメーターの命名のベストプラクティス

  6. 6

    Javaの単純なデータベースのようなコレクションクラス

  7. 7

    単純なユースケースのクロージャ

  8. 8

    C ++とPython間の単純なIPC(クロスプラットフォーム)

  9. 9

    C ++とPython間の単純なIPC(クロスプラットフォーム)

  10. 10

    Pythonでの単純なロジスティック回帰エラー

  11. 11

    jsの単純なスロットル

  12. 12

    単純なオブジェクト検証のためのプロパティベースのテスト

  13. 13

    Linuxx86_64での単純なスタックオーバーフローエクスプロイト

  14. 14

    Pythonの単純なプロセスベースの並列マップはありますか?

  15. 15

    スレッドロックの順序と単純な同期ブロック

  16. 16

    Javaの単純な抽象クラス

  17. 17

    Tensorflow:チェックポイントの単純なロード

  18. 18

    JavaでCPUベースのタスクを実行する単純なプログラムの最適なスレッドプールサイズは何ですか

  19. 19

    JAVAでのバットの単純なコードロジックのコーディング

  20. 20

    Javaの単純なjsonがデータベースからデータをフェッチして表示する

  21. 21

    ルールの書き換え、ホスト名チェックでの単純なOR

  22. 22

    Java の単純なコールバック

  23. 23

    単純なコマンドラインベースのPythonプロジェクトを構築する方法

  24. 24

    単純なタスクでプロローグの同等性チェックが失敗する

  25. 25

    単純なタスクでプロローグの同等性チェックが失敗する

  26. 26

    Javaでの時間ベースのロジックの単体テスト

  27. 27

    ルビーでデッドロックを与える単純なスレッド条件変数の例

  28. 28

    tqdmが利用できない場合の単純なフォールバックプログレスバー

  29. 29

    単純なデータセットへのロジスティック回帰の適用

ホットタグ

アーカイブ