java多线程有哪些优缺点?详细解析

java中多线程的使用是非常频繁的,而且它的作用也是很明显的。很多人可能对于java中多线程的一些知识不是很了解,今天就来详细简述一下java多线程的优缺点,一起来看看吧。

首先我们需要知道的是,java 中使用synchronized是用来表示该资源或者该方法是不能进行多个线程的共享的,所以当多个线程都在请求该资源的时候,就跟串行是一样的也就是单线程效果一样,但是当不为共享的时候就可以利用并发来大大的提高系统的效率。

优缺点如下:

1.多线程并不解决软件执行效率和你硬件系统的瓶颈,它只是达到更高效使用你的硬件系统资源。

2.从本质上来说,单核单CPU不存在并行,即使多线程也是串行,多线程不会提高CPU利用率。

3.对于同步块与单线程执行比较,并不存在多少性能差异,如果相比较,同步块的执行效率还要大大低于单线程程序,如果设计差,可能还是灾难级的。因为同步本身就需要占用系统资源和CPU片段,而且每个线程自己也需要占用资源,如果多线程达不到多线程的优势,那么它本身就会降低效率。

其实设计synchronized的目的是在使用多线程的时候从安全性方面去考虑的,例如在一个方法中修改一个全局变量,如果使用单线程当然是没什么问题的,一个线程进来我就自己一个人修改,也不会影响什么。

但是如果在多线程环境中,很多线程同时访问这个方法修改全局变量,那么就可能会出问题了,可能你争我抢(分配到CPU资源)把这个全局变量改的不成样子了,所以考虑安全性,我们使用synchronized。

如果有多个线程,表示你们得一个一个排队来,如果我进去方法里面了,那么我就把门给锁上,只有我一个在里面修改全局变量,你们都不能进来,等我处理完成了,我再释放锁,然后让下一个进来修改。

这样也就确保了全局变量不会被改的乱七八糟不成样子了,因为很多项目中会有这样的需求,所以我们得根据需求来确定相应的解决方案。

举例说明,你有100份英语卷子,有听力,选择题和作文三部分;每部分做完之后,必须把100份卷子都交上来以后,才能拿下一部分。一起拿下一部分的动作就叫做同步,你是拿叫一个同学做,还是叫100个同学做呢?(单线程,还是多线程)

一个进程中如果有多个线程,那么执行多线程中的非同步代码时比一个进程只有一个线程快。如果进程中有多个线程但是每个线程的所有代码都需要同步的话就和进程只有一个线程的效率是相同的。

总的来说java中线程的优缺点还是很明显的,上文也对于java的线程进行了详细的解析。java中关于线程的知识点还是非常详细的。想要了解更多java基础知识,敬请关注奇Q工具网。

推荐阅读:

java多线程同步集合是什么?并发集合是什么?

java多线程什么时候必须同步?如何同步?

java多线程的同步与异步,详细解析