マルチスレッドに関しては、あなたが妄想的で二重に妄想的であるとしましょう。アプリケーションの一部の機能のバックエンドを実行していて、アプリケーションがサーバー上で定期的にいくつかのメソッドをプルするとします。すべてが良いようですが、1つだけです。機能が他のデータ、たとえば同じ平凡なプロファイルに直接依存している場合はどうなりますか?問題は、スクリプトが計画どおりに機能し、驚きがないことを確認する方法です。トランザクション?はい、使用できますが、あなたが素晴らしい妄想であり、異なるクライアントからの同じメソッドへの10個のリクエストがサーバーに厳密に同時にどのように送信されるかをすでに想像している場合はどうでしょうか。そして現時点では、この方法のビジネスロジックは100,500の異なるデータに関連付けられています。これらすべてをどのように管理しますか?メソッドを同期するだけで、それだけです。しかし、保持する意味がない要求もある場合はどうなるでしょうか。ここで松葉杖はすでに始まっています。私はすでに数回同様の質問をしましたが、タスクはとてつもなく単純で日常的であるため、興味深いものでした(もちろん、論理的なバグがないことを気にかけている場合)。今日、私はこれを松葉杖なしで非常に簡単に実装する方法を考えることにしました。そして、ソリューションは文字通り100行のコードで実現しました。
少し説明的な例
運転手と同乗者がいるとしましょう。ドライバーは、たとえばクライアントが旅行を確認するまで、車を変更することはできません。クライアントは車の同じ特性を持つ旅行に同意したことがわかりましたが、実際にはドライバーは別の車を持っていますか?しないでください!あなたはこのようなものを整理することができます:
String result = l.lock(new ArrayList<Locker.Item>() {{
add(new Locker.Item(SimpleType.TRIP, 1));
add(new Locker.Item(SimpleType.USER, 2));
}}, () -> {
//
// - - USER=2 (),
// - TRIP=1
// USER=3, :)
// :)
return " :)";
});
エレガントでシンプル!
石を投げないでください!)。