一、解决高并发问题:
浏览器端:#####
1、浏览器缓存,减少请求
2、多个子域名部署,突破浏览器链接限制
3、图片文件独立域名部署,减少请求传输量
4、减少浏览器cookie大小
服务器端:#####
1、动静分离部署nginx+tomcat
2、应用集群,负载均衡--F5/Array/LVS/Nginx/TOMCAT
3、分布式缓存Memcached+Redis
4、应用本地缓存 Ehcache
5、JVM参数调优
6、用并发请求更好的技术 NodeJs/GoLang nodejs处理并发是Tomcat的很多倍
7、加服务器数量,加内存。
数据库:#####
1、数据库分库分表 3、读写分离 4、数据库本身缓存 Mysql Query
程序方法:#####
- ThreadLocal 保证不同线程拥有不同实例,为每个线程提供一个副本(解决了线程安全,并不是理想中的线程同步操作)。
- Synchronized加锁的方式,当A在使用资源时,B无法强行获得。Synchronized(锁) { }
- Wait 、notify:Wait进行线程等待,notify将机会(调用这个方法的线程)
- Volatile:volatile修饰的成语变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值,当成员变量发生变化时,强迫线程将变化值回写到共享内存。
三、单例模式:
概念:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
使用场景: 1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。