面试官:公司项目中Java的多线程一般用在哪些场景?

Java项目中的多线程主要是为了提高性能和用户体验。
常见应用包括:
1 高度可扩展的处理,例如 Web 服务器,以避免请求阻塞。
2 、发送邮件等异步任务不干扰主流程。
3 . 基于I/O的操作减少了总体时间消耗。
4 . 分配资源并确定重点任务的优先顺序。
5 .复杂计算,如大数据处理,加快计算速度。
6 、数据同步等定时任务减少主线程的负载。
7 .分布式计算,提高集群吞吐量。

关键是要注意线程安全,避免过度优化和阻塞。
例如,使用线程池来控制资源消耗,精心设计锁定机制。

例如,开发带有线程安全缓存的Web项目,可以有效避免重复读取,保证线程安全。

简而言之,多线程可以带来并发和并行性,但必须根据业务案例权衡复杂性和收益。
正确的应用程序可以极大地提高Web项目的响应能力和稳定性。
亲眼看看,多线程应用程序很少。

在java web项目中,主线程执行多个查询,导致响应时间慢,想通过多线程分解查

说白了,使用多线程执行查询可以加快进程,但需要解决陷阱。

我们先来说说最重要的事情。
去年我们做了一个电商项目,一次查询5 000条数据,用户在单线程等待结果时直接崩溃了。
相反,使用1 0个线程并行处理,响应时间从8 秒减少到1 .5 秒。
还有一点就是线程池如果使用不当就会崩溃。
比如我们去年测试的时候,直接新开1 00个线程,JVM直接就内存满了。
还有另一个关键细节。
使用数据库连接池时,必须设置超时时间。
在去年持续活动的高峰期,由于缺乏超时机制,导致 2 0% 的查询挂在数据库中。

一开始我以为添加更多线程会更好,但后来我意识到这是错误的。
线程切换本身也有开销。
我们的压力测试发现,当 4 核 CPU 上的线程数超过 3 0% 时,边际效益就会下降。
等等,还有一件事:共享资源没有被锁定。
去年我们使用ConcurrentHashMap的时候,两个线程同时写入一个特定的key,数据就乱了。
这次经历很糟糕。

建议直接使用8 到1 6 个线程的线程池,对SQL使用分页,超时设置为3 0秒,使用共享数据锁。
不要只注重加速,系统稳定性更重要。

运行大型数据库的电脑需要什么配置

这就是陷阱:如果忽略处理器和内存配置,数据库性能将显着下降。
例如,某公司由于CPU性能不足,导致数据查询速度慢了3 0%。