ロックでオブジェクトを保護しようとしています。Javaで非最終オブジェクトで同期する正しい方法
"try..catch"という醜い構文のため、私はmutexを選択しませんでした。私は読みやすさを向上させることができますどのように...
class MyClass {
private final Object lock = new Object();
private Channel channel = null;
public void setChannel() {
synchronized (lock) {
channel = new Channel();
synchronized (channel) {
// setup channel
}
}
}
public void unsetChannel() {
synchronized (lock) {
synchronized (channel) {
channel.close();
}
channel = null;
}
}
public boolean isSet() {
synchronized (lock) {
if (channel == null)
return false;
synchronized (channel) {
return channel.isActive();
}
}
}
}
しかし、それは醜いと読みにくいようだ:
閲覧StackOverflowのは、私は、これが適切に私の目標を達成する方法であるという結論に達しました私の解決策?
なぜ新しく作成されたオブジェクトをロックするのですか?メソッド全体を同期させることもできます –
@ScaryWombat使用前に作成したオブジェクトに対してセットアップを行いたいと思います。私はこれをしてはいけませんか?単純化のために私のメソッドのコードを整理したので、メソッド全体を同期させたくありません –
初心者には法的なJavaにすることで可読性を向上させることができます。あなたのメソッドはクラスの一部ですか?彼らは 'MyClass'の一部とされていますか? 'm_channelLock'とは何ですか?それにもかかわらず、私はあなたのコードについて同期よりも面倒なものは見当たりません。私は 'm_channelLock'が何であるか分からないので、あなたが何かを単純化できるかどうかは分かりません。 – ajb