并发、多线程中的线程安全问题就是弊端之一。因为面向对象编程是通过构建对象、向对象发消息(方法调用)改变对象状态来解决问题的,所以面向对象程序的方法一般都有副作用。所谓副作用就是说,方法执行后不但给出返回值,还改变了程序运行环境。System.out.println()方法往控制台输出了内容,这是副作用。setter方法改变对象属性,也是副作用。方法有副作用到了多线程环境,几个线程操作共享资源,就非常可能产生线程安全问题。
随着CPU速度越来越快,以及多核多线程CPU的普及,并发编程变得十分流行,面对面向对象编程易出线程安全问题的弊端,大家又想起了快被遗忘的函数式编程。lz有兴趣的话可以去百度一下scala,一个基于Java又引入函数式编程特性,减少并发中安全隐患的编程语言 |