Java基础

Java基础之多线程

  • Java多线程基本概念
    • 1.进程与线程
    • 2.线程调度
    • 3.同步与异步
    • 4.并发与并行

Java多线程基本概念

1.进程与线程

进程与线程的概念需要分清楚,面试的时候可能会问到。

  1. 进程 ,是指一个内存中运行的应用程序,每个进程都有独立的内存空间;
  2. 线程,是进程上进一步的细分,一个线程代表进程的一个执行路径,而这个进程的所有线程共享一个内存空间;

概念较为抽象,打开电脑的任务管理器,电脑上一个应用软件,如QQ、微信可以看做是一个或者多个进程,而进程可以分成多个子任务,比如说QQ能编辑和发送聊天信息,能发送和接受文件,语音视频等,这些子任务可以同时执行,而有些子任务必须按照一定的顺序执行,因此涉及线程调度问题。这些子任务共享QQ进程所对应的内存空间。

2.线程调度

首先明确一点,什么是线程调度,就像一家人围在一起吃饭,只有一碗菜,每次只能一个人夹,一般是长辈先吃,晚辈再动筷子,也就是重要的辈分高的人先吃。同理,一个CPU某一时刻只能运行一个线程,所以需要根据线程的重要程度分配CPU的使用资源,也就是优先级。由此java中产生几种线程调度方式。
-分时调度

	所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

-抢占式调度

	优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性)。

CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。举个例子,1个CPU执行一个线程,其速度要比开8个线程执行得更快,理由是1个CPU只能同时执行一个线程,而多个线程的切换也需要耗时。

3.同步与异步

-同步

	线程排队执行 , 保证了线程不会同时访问同一块内存,效率低但是安全。

-异步

	线程同时执行 , 由于同时访问同一块内存,效率高但是数据不安全。经典卖票例子。

4.并发与并行

-并发

	指两个或多个事件在同一个时间段内发生。不强调同时执行,强调线程之间能够切换以执行不同任务的能力。比如吃饭的时候来了电话,如果能放下碗接电话,电话接到一半吃一口饭,这就是支持并发。如果必须等到吃完饭才能接电话,也就是线程必须执行完才能执行下一线程,那就是不支持并发。

-并行

	指两个或多个事件在同一时刻发生(同时发生)。同样是吃饭接电话的例子,如果能边吃饭边接电话,那么说明这个人(CPU)支持并行。

你可能感兴趣的:(java)