私は問題を抱えている、 サーバーとの同期クライアントが
は私がネッティーといくつかのクライアントとバックエンドサーバーを持っているバックエンドのバックエンドの取引データバンクや制御システムなど、すべてのデータおよび行為、 (BSON文書で構成された)プレーヤーがあります。クライアントの1つでこれを処理してからバックエンドに再度ロードしたいのですが、クライアントがデータを編集してバックエンドがデータに書き込んでいる間にデータを保存しないようにするにはどうすればいいですか?このようにそれを行うにはイムatempting:
データクラス:
package testing;
import java.util.ArrayList;
public class data {
String data;
private ArrayList<EditRequest<data>> requests;
private int nexteditid = 0;
private int currenteditid = -2;
public data() {
requests = new ArrayList<>();
}
public void addRequest(EditRequest<data> request) {
request.setEditid(nexteditid);
nexteditid++;
requests.add(request);
trynextedit();
}
private void trynextedit() {
System.out.println("trynextedit!");
if(currenteditid == -2 && requests.size() > 0) {
System.out.println("editing");
EditRequest<data> request = requests.remove(0);
currenteditid = request.getEditid();
request.onEdit(data.this);
}
}
public void finischedit(EditRequest<data> request) {
if(currenteditid != -2) {
if(currenteditid == request.getEditid()) {
System.out.println("Edit request finisched! id: " + request.getEditid());
currenteditid = -2;
trynextedit();
}else {
throw new IllegalArgumentException("not the right id!");
}
}else {
throw new NullPointerException("no current edit!");
}
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
私は電子のEditRequestを登録したクラスを編集したい場合はそこで編集要求が処理されています
package testing;
public abstract class EditRequest<T> {
public int editid;
public abstract void onEdit(T t);
public int getEditid() {
return editid;
}
public void setEditid(int editid) {
this.editid = editid;
}
}
私はお互いの後で編集をハンドリングできます:
package testing;
public class main {
public static void main(String[] args) {
data data = new data();
data.addRequest(new EditRequest<data>() {
@Override
public void onEdit(data t) {
System.out.println("runing edit 1!");
t.setData(t.getData() + "edit 1!");
t.finischedit(this);
}
});
data.addRequest(new EditRequest<data>() {
@Override
public void onEdit(data t) {
System.out.println("runing edit 2!");
t.setData(t.getData() + "edit 2!");
t.finischedit(this);
}
});
System.out.println(data.getData());
}
}
今私の質問はより良い方法ですか?
同期、ミューテックス、セマフォなどについて読む –