Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!
| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 最新资讯 >

Java并行编程相关概念面试必备!

发布日期:2020-08-15 15:18:45点击次数:

分享到:
Java并行编程相关概念你知道吗?面试必备快来看看!
Java同步和异步
同步和异步通常来形容一次方法的调用。同步方法一旦开始,调用者必须等到方法结束才能执行后续动作;异步方法则是在调用该方法后不必等到该方法执行完就能执行后面的代码,该方法会在另一个线程异步执行,异步方法总是伴随着回调,通过回调来获得异步方法的执行结果。
并发和并行
很多人都将并发与并行混淆在一起,它们虽然都可以表示两个或者多个任务一起执行,但执行过程上是有区别的。并发是多个任务交替执行,多任务之间还是串行的;而并行是多个任务同时执行,和并发有本质区别。
对计算机而言,如果系统内只有一个 CPU ,而使用多进程或者多线程执行任务,那么这种情况下多线程或者多进程就是并发执行,并行只可能出现在多核系统中。当然,对 Java 程序而言,我们不必去关心程序是并行还是并发。
临界区
临界区表示的是多个线程共享但同时只能有一个线程使用它的资源。在并行程序中临界区资源是受保护的,必须确保同一时刻只有一个线程能使用它。
阻塞
如果一个线程占有了临界区的资源,其他需要使用这个临界区资源的线程必须在这个临界区进行等待(线程被挂起),这种情况就是发生了阻塞(线程停滞不前)。
死锁\饥饿\活锁
死锁就是多个线程需要其他线程的资源才能释放它所拥有的资源,而其他线程释放这个线程需要的资源必须先获得这个线程所拥有的资源,这样造成了矛盾无法解开;如图1情形就是发生死锁现象:
 
活锁就是两个线程互相谦让资源,结果就是谁也拿不到资源导致活锁;就好比过马路,行人给车让道,车又给行人让道,结果就是车和行人都停在那不走。
饥饿就是,某个线程优先级特别低老是拿不到资源,导致这个线程一直无法执行。
并发级别
并发级别分为阻塞,无饥饿,无障碍,无锁,无等待几个级别;根据名字我们也能大概猜出这几个级别对应的什么情形;阻塞,无饥饿和无锁都好理解;我们说一下无障碍和无等待;
无障碍:无障碍级别默认各个线程不会发生冲突,不会互相抢占资源,一旦抢占资源就认为线程发生错误,进行回滚。
无等待:无等待是在无锁上的进一步优化,限制每个线程完成任务的步数。
并行的两个定理
加速比:加速比=优化前系统耗时/优化后系统耗时
Amdahl 定理:加速比=1/[F+(1-F)/n] 其中 n 表示处理器个数 ,F是程序中只能串行执行的比例(串行率);由公式可知,想要以最小投入,得到最高加速比即 F+(1-F)/n 取到最小值,F 和 n 都对结果有很大影响,在深入研究就是数学问题了;
Gustafson 定律:加速比=n-F(n-1),这两定律区别不大,都体现了单纯的减少串行率,或者单纯的加 CPU 都无法得到最优解。

想了解更多IT软件学习方面的内容,欢迎到西安鸥鹏IT教育进行咨询,是专业的IT项目管理、项目开发、IT人力资源顾问公司。OPENLAB为几乎所有相关知名IT企业CISCO,MICROSOFT,REDHAT,华为,ORACLE的授权培训机构,同时是PROMETRIC和VUE授权的相关考试中心,可以组织学员参加认证考试并获得IT资格认证。为您提供最好的优质服务。