猿问

Hapshmap vs tomcat应用服务器

采访中我有一个问题,您在当前项目中使用的是Hashmap还是Hashtable?

我的回答:我说我使用过Hashmap而不是Hashtable,因为它不是多线程环境(项目没有多线程处理)。

问:Tomcat创建多个线程来处理请求,那么为什么要使用Hashmap?

我的Ans:

它将在其中创建多个线程,并且每个线程都有自己的线程堆栈内存,用于保留那些对象并处理请求。

是我的回答是否正确,如果不正确,请纠正我这个问题的答案。


泛舟湖上清波郎朗
浏览 165回答 1
1回答

互换的青春

这取决于上下文。如果在请求之间使用了某些共享的数据结构,那么可以,则需要某种同步。您可能需要考虑一下,java.util.concurrent.ConcurrentHashMap但是提供的阅读内容比少Hashtable。没错,尽管如果您在请求内创建结构,并且不在线程/请求之间共享该结构,则没问题HashMap。只是为了充实一下,回复评论:假设您正在编写一个接受键/值对数组的端点。如果此端点反复需要根据键来引用这些请求值,但其他任何请求都不需要这些值,则您可能希望将它们放入HashMap中。如果服务器同时服务于向同一端点的n个并发请求,则它将创建n个控制器实例,每个实例都使用自己的堆栈(如您所指出的)和自己的HashMap副本执行该方法。重要的是,HashMap的每个实例将永远不必处理来自多个线程的并发访问。现在想象第二种情况,站点希望阻止用户尝试过多登录。您可以在应用程序上下文中使用字典,该字典存储每个用户的登录活动的计数,以尝试查找帐户是否受到攻击(顺便说一句,这是说明性的-请勿以这种方式实现此方案)。在这种情况下,n个同时请求都将同时更新字典。如果多个线程尝试同时添加新密钥,则可能会杀死该应用程序。您在下面的评论是指应用程序/会话上下文。会话仍被共享;即使它属于一个用户,该用户也可以向服务器发出多个并发请求,这些请求都将更新同一HashMap,例如,他们的购物车
随时随地看视频慕课网APP

相关分类

Java
我要回答