【发布时间】:2017-04-25 09:51:42
【问题描述】:
我已经使用 Java 设计了一个服务器客户端应用程序,并且我已经连接到多个用户的服务器。 服务器提供了一些功能,例如:
- 下载文件
- 创建文件
- 写入/附加文件等
当两个或多个用户发送相同的请求时,我发现了一些需要同步的问题。
例如:当用户想同时下载同一个文件时,如何使用同步块或任何其他方法来同步这个动作?
//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 个用户想要下载同一个文件时,其中一个必须等待?另一个人会得到吗?感谢您的宝贵时间!
【问题讨论】:
-
也许你会在这里找到答案:What does 'synchronized' mean?
-
我读过它,我也理解它,但我不知道在我的例子中该怎么做
标签: java multithreading