关于多线程的学习心得

时间:2021-06-14 16:23:12
1.web应用中,要对某一个任务用多线程实现,最简单的代码格式是不是必须把要执行的代码放在run方法中?
WEB服务器会帮你把每个访问请求开辟一个线程,你只要按照你所开发的框架,比如tomcat会让你利用servlet这个框架来写代码。具体真的一言难尽,反正不用写到RUN中,除非你想对线程控制到极致,例如你要做测试。
2.部署在服务器上的一个网站,多个浏览器在访问同一个功能点时,存在多线程之说吗?
多个浏览器的意思如果是(无论多台电脑上还是同一台电脑上的)多个页面打开同一网站的某个功能页面,那么如第一个问题所说,每一次访问(即打开页面)都是一个请求,服务器会为每个请求开辟一个线程,就是多线程。
3.多线程和并发之间是怎么一种关系?
多线程执行效率就是评判并发效果的好坏,高并发的概念就是在保证数据准确的情况下,减少进程所需操作的时间,特别经典的是页面访问服务器后,让服务器去修改数据库,如果你的数据库优化做的到位,那么查找数据并返回给客户端的时间将大大减少,我们知道对于一个热门网站的查询量是非常大的,然后一个服务器内存可以接收的进程数量也是有限的,这样一来,我们就说某一时间段内处理线程(访问请求)越多,那么并发效率就越好了。
4.对于经典的买票程序,是因为要操作共同资源而是用多线程技术,那么对于一些平常的查询显示功能就没必要用多线程技术。对于这里发起的多个查询请求,是多个线程吗?
买票程序应用与WEB就应该是多线程,共同资源存放在数据库中,和第三个问题的回答类似,这种商业性的站点更侧重于保证数据准确性,有时候我们修改的某项值会影响到别人的查询与增删,于是意外情况就产生了,例如在一个A线程(用户)正在修改某项值(买票)的情况下,要减少1张的剩余票总量是不准确的,因为当这个用户在方法中对获得的总剩余票数的同时(以获得总剩余票数,但还未减一),另一个B线程(用户)也进行买票,那么B获得的总剩余票数与A是相同的,因此他们如果同时被允许操作数据库的公共资源,那么当两人都只想完购票的减一操作时,第三线程或其他线程的查询剩余票量将只会看到原本减少2张剩余量,实际只少了一张,可以想象如果操作的线程越多,误差将会更大。因此数据库才会有事务,锁等等概念来提高确保数据准确性前提下的并发效率