目前常用的MVC框架是SpringMVC,该框架默认单例,它就采用了ThreadLoacl来实现。
可见ThreadLoacl适用于单例模式中来保证线程安全,但是其只能保证不同的线程访问各自数据时的线程安全。不能保证访问公共数据的线程安全,例如多个线程同时访问数据库中同一张表中的同一条记录。也不能保证访问自己数据的线程安全,例如因为网络延迟造成的连续点击事件,这个一般通过在前端页面加遮盖层来解决。
而synchronized用于保证多个线程来访问公共数据时的线程安全,例如多个线程同时修改同一张表中的同一条记录,我们可以通过同步表中的id字段来解决。