這不是一項家庭作業,而是我在網上找到的一個採訪問題。滿足高併發性的簡單Web服務器
的Java代碼:
public class SimpleWebServer{
public static void handleRequest(Socket c)
{
//Process the request
}
public static void main(String[] args) throws IOException
{
ServerSocket server=new ServerSocket(80);
while(true)
{
final Socket connection=server.accept();
Runnable task=new Runnable(){
@Override
public void run()
{
handleRequest(connection);
}
};
new Thread(task).start();
}
}
}
的問題是,當有高併發會有什麼潛在的問題?我的分析是:
- 它沒有使用synchronized關鍵字,所以可能會出現競態條件發生的情況。
- 它應該使用線程池,這是更高效。
- 對於每個傳入線程來說,這個類總是會創建一個新的ServerSocket,當高併發性發生時這將消耗大量空間?