Java并发(一)并发基本概念

最近复习java并发的知识,在这之前,我们先了解一下java中的一些概念:

  • 我们常说同步与异步。通俗来说他们描述的是在异步环境下(多个线程时不相干的),并发线程之间的访问共享资源时通过消息通知的协作方式。
    • 同步: 在一个线程对共享资源进行访问时,其他线程需要等待,可能会阻塞,在后面线程状态中再详细谈。
    • 异步:在一个线程对共享资源进行访问时,其他线程在等待的时间,可以去做自己的事情。
    • java中提供的同步机制:wait/notify、Synchronized关键字、volatile、并发容器、、基于AQS的同步工具类(可重入锁等)、ThreadLocal、原子类等
  • 再来说一下 并行与串行:
    • 并行: 多个任务是同时执行的
    • 串行: 多个任务是顺序执行的
      关注的是任务的执行方式,在多线程中,串行的任务一个一个执行,直到结束。并行中多个任务在同一时间点执行。
      最后来说一下并发,通俗来说,就是多个任务在同一个时间段内去执行,要与并行的同一时间点区别开来,举个例子,并行:运动会,十名运动员同时在自己的跑道上奔跑;并发:运动会上,十名运动员接力跑。
      来点理论的:
  • 并发与并行其实都是多个任务一起执行,但是并行更侧重的是一个时间点,也就是说多个任务是同时执行的,是物理上的同时执行,要求多个CPU核心,当只有一个cpu核心时,是无法实现并行 的,而并发是逻辑上的同时运行,侧重的是一个时间段,在一个核心上多个任务交替执行,但是他们可以交替获得时间片,造成并行的错觉。

你可能感兴趣的:(Java并发(一)并发基本概念)