2019-07-25 阿里守则 并发和控制语句

并发处理

1.任何时候获取单例对象都要保证线程安全,其中的方法也要保证线程安全;

2.创建线程的时候 最好要用线程的名称去表述是做什么的;

3.线程资源必须通过线程池去创建,不允许显示的创建,避免系统创建大量同样的线程而导致内存的浪费

4.不允许通过Executor去创建 而应该用ThreadPoolExecutor **

5.SimpleDateFormat是线程不安全的,反正也不用了以后 Date 用Instant替换,Calander用LocalDateTime替换 SimpleDateFormat 用DateTimeFormmater替换

6.须回收自定义的ThreadLocal变量,尤其在线程池场景下,线程经常会被复用,如果不清理自定义的 ThreadLocal 变量,可能会影响后续业务逻辑和造成内存泄露等问题。尽量在代理中使用 try-finally 块进行回收。

7.高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。说明:尽可能使加锁的代码块工作量尽可能的小,避免在锁代码块中调用 RPC 方法。

8.在使用阻塞等待获取锁的方式中,必须在try代码块之外,并且在加锁方法与try代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在 finally 中无法解锁

控制语句

1.在一个switch块内,每个case要么通过continue/break/return等来终止,要么注释说明程序将继续执行到哪一个 case 为止;在一个 switch 块内,都必须包含一个default 语句并且放在最后,即使它什么代码也没有。

2.当switch括号内的变量类型为String并且此变量为外部参数时,必须先进行null判断。

3.在高并发情况下,尽量减少使用==来做判断,有一种可能就是发送奖品如果你写==0结束 ,突然来了好多请求数字一下子变成负数了,这样就没办法了,所以可以改成小于零,这样就不会出现击穿了

4.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容