初探并发

来源:互联网 发布:汽车振动检测软件 编辑:程序博客网 时间:2024/06/16 05:34

并发是什么?

并发是指两个或多个线程在 同一时间间隔 内发生并行是指两个或多个线程在 同一时刻 执行。

为什么并发是“同一时间间隔”内发生的?

很多博客甚至百度百科的解释很容易误导我,他们认为(百度百科):并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。

这样的解释让我认为:并发是“同一时间间隔”内发生是因为cpu只有一个,导致不能同时进行一个以上的线程,然后只能在一个cpu下分时间执行多个线程,所以多个线程是在同一时间间隔内发生的;那么多核或者多cpu下可以同时进行一个以上的线程,此时没有并发吗?

我认为产生这个“同一时间间隔”内发生的根本原因是因为多个线程对共享资源的竞争,而不是cpu数目多少,竞争导致多个线程对共享资源的调用有序,多个线程不能同时调用同一共享资源,同时调用会导致数据错乱,同一时刻只能有一个线程调用共享资源。

偷来的图:


并发意味着多个执行实体(比方说上面例子中的人)可能需要竞争资源(咖啡机),因此就不可避免带来竞争和同步的问题;而并行则是不同的执行实体拥有各自的资源,相互之间可能互不干扰。原文连接:并发是什么 

为什么要用并发?

提高资源利用率,响应更快。

并发怎么用?

volatile

synchronized

java.util.concurrent包

总结

在Java中,并发围绕的重点是“对共享资源的竞争”,竞争意味着多线程,所以并发依靠多线程体现。


遗留问题:单核多核或单cpu多cpu下Java多线程分别是怎样的?




原创粉丝点击