你的位置:首页 > 软件开发 > Java > 深入浅出Java多线程

深入浅出Java多线程

发布时间:2016-07-19 09:03:22
Java给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分 ...

深入浅出Java多线程

Java给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径。

多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。

这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守候线程都结束运行后才能结束。

多线程能满足程序员编写高效率的程序来达到充分利用CPU的目的。

1. 多线程基础概念介绍

进程是程序(任务)的执行过程,它持有资源(共享内存,共享文件)和线程。

分析:

①     执行过程 动态性的,你放在电脑磁盘上的某个eclipse或者QQ文件并不是我们的进程,只有当你双击运行可执行文件,使eclipse或者QQ运行之后,这才称为进程。它是一个执行过程,是一个动态的概念。

②     它持有资源(共享内存,共享文件)和线程:我们说进程是资源的载体,也是线程的载体。这里的资源可以理解为内存。我们知道程序是要从内存中读取数据进行运行的,所以每个进程获得执行的时候会被分配一个内存。

③     线程是什么?

 深入浅出Java多线程

如果我们把进程比作一个班级,那么班级中的每个学生可以将它视作一个线程。学生是班级中的最小单元,构成了班级中的最小单位。一个班级有可以多个学生,这些学生都使用共同的桌椅、书籍以及黑板等等进行学习和生活。

在这个意义上我们说:

线程是系统中最小的执行单元;同一进程中可以有多个线程;线程共享进程的资源。

④     线程是如何交互?

就如同一个班级中的多个学生一样,我们说多个线程需要通信才能正确的工作,这种通信,我们称作线程的交互

⑤     交互的方式:互斥、同步

类比班级,就是在同一班级之内,同学之间通过相互的协作才能完成某些任务,有时这种协作是需要竞争的,比如学习,班级之内公共的学习资料是有限的,爱学习的同学需要抢占它,需要竞争,当一个同学使用完了之后另一个同学才可以使用;如果一个同学正在使用,那么其他新来的同学只能等待;另一方面需要同步协作,就好比班级六一需要排演节目,同学需要齐心协力相互配合才能将节目演好,这就是进程交互。

##一个线程的生命周期

线程经过其生命周期的各个阶段。下图显示了一个线程完整的生命周期。

深入浅出Java多线程

  • 新建状态:

    使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。

  • 就绪状态:

    当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。

  • 运行状态:

    如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

  • 阻塞状态:

    如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。

  • 死亡状态:

    一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。

## 线程的优先级

每一个Java线程都有一个优先级,这样有助于操作系统确定线程的调度顺序。

Java线程的优先级是一个整数,其取值范围是1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。

默认情况下,每一个线程都会分配一个优先级NORM_PRIORITY(5)。

具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序,而且非常依赖于平台。

2. Java 中线程的常用方法介绍

# Java语言对线程的支持

      主要体现在Thread类Runnable接口上,都继承于java.lang包。它们都有个共同的方法:public void run()。

  run方法为我们提供了线程实际工作执行的代码。

 

下表列出了Thread类的一些重要方法:

序号方法描述
1public void start()

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:深入浅出Java多线程

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。