并发是什么
自Java9之后应该是引入了不少并行的API,可能用来和并发相比较,会更容易理解些
并发:
我:煮饭的时候,边炒菜,焖锅的时候边切菜
并行:
我:炒菜
老婆:切菜
当然其实这个不是很准确,因为并发也可以有多个处理器(我和老婆都算单独的一个处理器)
只是说单处理器,应当没有实际意义上的并行,因为不可能【同时】执行
那么我理解的并发,其实意图在于可以尽量以多任务的形式尽快将任务完成,并且任务之间可以切换执行
那么从这个层面理解,其实在多核处理器中,并发才能体现优势
而JAVA本身对于多线程的支持,使得我们在业务建模的时候不用过多考虑这点,建模起来也会比较简单些
现代编程中应该也会更追求前、中、后台,技术的细节会更多被屏蔽掉
使得应用更容易编程
但并发&多线程也引入新的问题域
1、安全性 - 安全性指错误的事情不会发生;比如一些线程不安全的类,在高并发下,会造成对象破坏的情况
2、活跃性 - 活跃性是指正确的事情,终将发生;比如高并发下,我们希望多一个账户的多次扣款正常进行,且金额正确
3、性能 - 我们在期望安全性和活跃性的同时,会希望正确的事情尽快发生,也就是性能问题 。单线程一般是极限性能,只做一件事,可是多线程,理论上会存在线程切换上下文和访问共享数据(需要进行同步)的问题
一般认为安全性和活跃性是必须的,其次要平衡性能。因为有时候性能可能会破坏安全性