Javaを使用してサーバークライアントアプリケーションを設計しましたが、複数のユーザーに複数のサーバーに接続しています。私は同期する必要があるいくつかの問題を発見し マルチスレッドJavaアプリケーションの同期を実現する方法
- ファイルのダウンロード
- 作成ファイル
- 足す/追加ファイルなど: サーバーは、次のようないくつかの機能を提供し、 2人以上のユーザーが同じ要求を送信したとき。
例:ユーザーが同じファイルを同時にダウンロードしたい場合、どのように同期化されたブロックまたは他の方法を使用してこの操作を同期できますか?ここで
//main (connecting 2 users in the server) ServerSocket server= new ServerSocket(8080, 50); MyThread client1=new MyThread(server); MyThread client2=new MyThread(server); client1.start(); client2.start();
私は同期したい方法です。
//outstream = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));//output to client //instream = new BufferedReader(new InputStreamReader(sock.getInputStream()));//input from client public void downloadFile(File file,String name) throws FileNotFoundException, IOException { synchronized(this) { if (file.exists()) { BufferedReader readfile = new BufferedReader(new FileReader(name + ".txt")); String newpath = "../Socket/" + name + ".txt"; BufferedWriter socketfile = new BufferedWriter(new FileWriter(newpath)); String line; while ((line = readfile.readLine()) != null) { outstream.write(line + "\n"); outstream.flush(); socketfile.write(line); } outstream.write("EOF\n"); outstream.flush(); socketfile.close(); outstream.write("Downloaded\n"); outstream.flush(); } else { outstream.write("FAIL\n"); } outstream.flush(); } }
注:このメソッドは、Threadを拡張するクラスであり、私がしたいときに使用されていますオーバーライドされたメソッドでファイルを "ダウンロード"するRun()
2人のユーザーが同じファイルをダウンロードしたい場合、そのうちの1人が待たなければならないことをこの例では保証していますか?他の人はそれを手に入れますか?御時間ありがとうございます!
多分あなたはここに答えを見つけるでしょう:[同期は何を意味するのですか?](http://stackoverflow.com/questions/1085709/what-does-synchronized-mean) – Sergey
私はそれを読んで私もそれを理解したが、私の例でそれを行う方法を知らない – Phill