Java多线程技能

Java多线程的学习起始是理解Thread类中的核心方法,需要掌握如下关键:

  • 线程的启动
  • 如何使线程暂停
  • 如何使线程停止
  • 线程的优先级
  • 线程安全相关性问题
1.1、进程与多线程的概念、多线程的优点
1.1.1、进程与多线程的概念
  • 进程:是受操作系统管理的基本运行单元。
  • 线程:可理解为在进程中独立运行的子单元。
1.1.2、多线程的优点

示例:任务1是等待远程服务器返回数据,以便进行后期处理,耗时10秒,任务2是返回本地数据,耗时1秒;两任务完全独立、互补相关。

  • 单线程情况下:需要等待任务1先处理,此时CPU一直处于等待状态(空运行),任务2需要在10秒后才能运行。

java 多线程的种类 java多线程的特点_java 多线程的种类

  • 多线程情况下:CPU在任务1和任务2之间来回切换,使得任务2不必等到10秒后再运行。

java 多线程的种类 java多线程的特点_进程与多线程的概念_02

单线程与多线程对比:

对比项

单线程

多线程

执行方式

排队执行(同步)

切换执行(异步)

CPU利用率

注意:多线程是异步的,但是不要把Eclipse里代码的顺序当成线程执行的顺序,线程被调用的时机是随机的

1.1.3、多线程的三大特性
  • 原子性:是指一个操作是不可中断的。即使是多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。
  • 实质:线程安全问题
  • 可见性:是指当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改
  • 实质:java内存模型
  • 有序性:在并发时,程序的执行可能会出现乱序。给人的直观感觉就是:写在前面的代码,会在后面执行。有序性问题的原因是因为程序在执行时,可能会进行指令重排,重排后的指令与原指令的顺序未必一致。
  • 实质:join、wait、notfi(多线程之间通讯)