I은 문제가 있다면, 서버와 동기화 클라이언트는
나는 인 Netty 여러 클라이언트와 백 엔드 서버가 백 엔드에서 백엔드 거래 데이터 은행 및 제어 시스템 등 모든 데이터와 행위, BSON 문서로 구성된 플레이어가 있습니다. 이제 클라이언트 중 하나에서이 작업을 수행하고 백엔드에 다시로드하고 싶습니다. 어떻게 백엔드가 데이터에 쓰는 동안 클라이언트가 데이터를 편집하고 저장하지 못하게 할 수 있습니까?임 atempting이처럼해야 할 일 :
데이터 클래스 :
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;
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 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());
}
}
지금 내 질문은 더 나은 방법인가요?
동기화 된, 뮤텍스, 세마포어 등에 대해 읽으십시오. –