为什么使用多线程?
主要原因:
提高系统的资源利用率
执行IO操作时,我们的线程可以适当多一点,因为很多时候CPU是相对空闲的。如果是计算型的操作,本来CPU就不空闲,还开很多的线程就不对了(有多线程就会有线程且患的问题,线程切换是需要耗费资源的)。
使用多线程会有什么问题?如何理解"线程安全"?
如果不是线程安全的,如何使得程序变得线程安全?
如果是集合,可以考虑JUC包下的集合类;
如果是数值/对象,可以考虑Atomic包下的类;
如果是涉及到线程的重复利用,考虑是否需要使用线程池;
如果涉及到对线程的控制(比如一次能使用多少个线程,当前线程触发的条件是否依赖其他线程的结果),可以考虑CountDownLatch/Semaphore;
如果synchronized无法满足,可以考虑lock包下的类;
多线程离我们远吗?
Tomcat其实就是以多线程去响应请求的;
Tomcat处理每一个请求都会从线程连接池中用一个线程去处理。然后这个请求线程顺藤摸瓜到Servlet,执行对应的service()方法。
service方法是无状态的,多个线程请求service方法,往往都没有操作共享变量,不操作共享变量就不会有线程安全问题。
springMVC也是类似,底层还是Servlet
还有在连接数据库时,用对应的连接池,也是多线程配置。
所有关于多线程的知识点:
进程和线程的区别:
进程