|
|
1
5
嗯,你没有
明确规定
请注意,您的JSP容器可能使用线程池来服务1000个请求,而不是创建1000个线程。
编辑:至于为什么使用
举一个真实的例子,假设你有一千名购物者,他们都想从一家相当小的商店买东西。你会怎么做?在同一时间把所有1000人都放在商店里,或者在任何时候都把数量控制在商店里的一个相当小的数量,然后在外面排队? |
|
|
2
1
例如,;当我在笔记本电脑上用一个大数据库测试我的软件时,我总是被硬盘IO绑定。然而,在生产中,数据库服务器有足够的内存和快速的磁盘,因此优化我的IO软件是不明智的。
我认为比性能更重要的是语义。使用像synchronous这样的关键字不仅对编译器有指导意义,而且对(下一个)开发人员也有指导意义。 通过使用synchronous,您可以与ApplicationContext上的所有其他同步方法共享锁,这些方法也可能与searchObject无关。 如果searchObject不是线程安全的,我可能会建议使用锁定对象。这涉及到口味:
或
在您的情况下,我不会使用任何同步,因为它不是必需的,并在确定瓶颈之前检查生产类硬件。
|
|
|
3
0
如果没有同步,那么每个线程将并发运行,而不会阻塞锁。
(如注释所示)意味着它将在多个线程访问它时正常工作- 它会阻塞线程。 |
|
|
4
0
|
|
|
5
0
如果SearchObject.search已同步,则为“是”。否则,就试试看吧。 |
|
|
6
0
为什么需要15秒?如果它正在等待磁盘访问,而您只有一个磁盘,那么无论您有多少线程,您都会受到磁盘搜索速度的限制。在这种情况下,更多的线程甚至可能更慢。 |
|
|
7
0
在您的情况下,它们都将同时执行。 如果要防止这种情况发生,则需要某种同步来防止这种情况发生(例如,将方法声明为已同步或使用锁)。
如果将doSearch()方法声明为已同步,则一次只能有一个线程能够调用它。其他线程将阻塞,直到第一个线程完成,等待的线程将一次一个地“让进来”。可以想象,如果有很多线程调用该函数,那么这将降低性能。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 2 年前 |
|
|
András Takács · Python多线程错误 2 年前 |