Spring下的多线程
工作不到两年,大部分都在写业务代码,了解业务相关的知识。回顾一下发现平时并没有遇到过多线程的问题。最近看一些面试题发现对java后端来说,多线程部分的知识还是很重要的,这里记录一下。
我平时主要用springMvc和springBoot这两个框架,整个框架的设计不涉及多线程。
但是javaweb对于并发量还是有一定要求,就很好奇怎么实现的并发???
参与的系统数据主要存储在mysql中,数据库主要使用乐观+悲观锁。spring中的bean都采用默认的单例模式,spring管理了许多bean,但是并没有保证这些对象的线程安全。由于我平时使用的类对象几乎只是实体模型,不存储状态即是无状态对象,因此也就不需要考虑多线程开发的问题。即使数据发生冲突,也是通过事务和数据库的锁机制来解决。
如果必须要在bean中声明有状态的实例变量和类变量,可以使用ThreadLocal把变量变为线程私有的,如果bean的实例变量或者类变量需要在多个线程之间共享,那么只能使用synchronized,lock,CAS等这些实现线程同步的方法了。