1.线程的基本概念
什么是线程,线程就是程序中单独顺序的流控制,线程本身不能运行,它只能用于程序中,只能使用分配给程序的资源和环境。
通常一个进程可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的OS中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程小,基本上不拥有系统资源,所以它的调度所付出的开销会小的多,能更高效地提高系统内多个程序之间并发执行的程度。
2.进程与线程的比较
线程又称轻型进程或者进程元,相应的传统进程又称重型进程,传统进程相当于只有一个线程任务,在有了线程之后,一个进程有一个或者多个线程任务。
1)进程是资源分配的基本单位,而线程是任务调度和运行的基本单位,在任务调度方面或者线程调度方面不需要设计存储管理方面的操作所以开销更小。
2)多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内空间和一组系统资源,有可能相互影响。
3)线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换的负担要小。
3.线程的生命周期
1)新建线程(NEW):通过New关键字创建了Thread类或者子类的对象
2)就绪状态(RUNNABLE):是创建的线程对象调用了start方法,,这时的线程等待时间片轮转到自己这,以便获得CPU;第二种情况是线程在处于RUNNABLE状态时并没有运行完自己的run方法,时间片用完之后回到RUNNABLE状态,还有种情况就是处于BLOCKED状态的线程结束了当前的BLOCKED状态之后重新回到RUNNABLE状态。
3)执行状态(RUNNING):这时的线程指的是获得CPU的RUNNABLE线程,RUNNABLE状态是所有线程都希望获得的状态。
4)DEAD:处于RUNNING状态的线程,在执行完run方法后,就变成了DEAD状态了。
5)BLOCKED:这种状态指的是处于RUNNING状态的线程,处于某种原因,比如调用了sleep方法或者进行IO操作让出当前CPU给其他线程。
4.单线程的应用
当程序启动运行时,就自动产生一个线程,主方法main就是在这个主线程上运行。
如图下图所示
可以看到main方法是运行在主线程上面的。我们的程序都是由线程来执行的
5.多线程概念
A.多线程的概念:
1)一个进程可以包含一个或者多个线程
2)一个程序实现多个代码同时交替运行,就需要产生多个线程。(比如同一个方法运行在多个线程上,第一个线程可能运行到第3行,而此时第二个线程可能只运行到第1行,第三个线程可能已经运行完了)
3)CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情。
B.多线程的目的
其实就是最大限度的利用CPU资源,当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。
6.多线程在Java中基本应用
同其他编程语言相比,Java内置了多线程的实现方法。表现在程序上有两种实现方式:
1)继承Thread类,重写run方法
2)实现Runnable接口,实现run方法
在实践多线程编程之前我们来熟悉以下Thread类和Runnable接口。
Thread类:继承了object超类以及实现了Runnable接口。
API里面的介绍:
A thread is a thread of execution in a program.The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.
Every thread has a priority.Threads with higher priority are executed in prefernce to threads with lower priority.Each thread may or may not also be a daemon .When code running in some thread creates a new Thread Object,the new thread has its priority initially set equals to the priority of the creating thread,and is a daemon thread if and only if the creating thread is a daemon.
主要意思也就是线程是一个运行程序中的控制流。Java虚拟机允许多个线程同时运行。每个线程都有一个优先级,虚拟机会偏向选择优先级高的进程运行,线程可以是一个守护进程也可以不是一个守护线程,如果一个线程是守护线程,那么创建它的线程肯定也是守护线程。
Runnalbe和Thread雷同。因为Thread实现了Runnalbe接口。
7.多线程的实践
Thread类
public class TestThread { public static void main(String[] args) { Thread1 thread1=new Thread1(); thread1.start(); } } class Thread1 extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("Thread " + i); } } }
在System.out.println(“Thread”+i)打印出设置断点,运行程序如下:
可以看到现在程序有两个线程,打断点的线程处于挂起状态(Suspend,这个后面会讲到).
执行结果:
实现Runnable接口
class Thread2 implements Runnable{ @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("Thread2 " + i); } } } public static void main(String[] args) { Thread1 thread1=new Thread1(); Thread thread2=new Thread(new Thread2()); thread1.start(); thread2.start(); }
在thread2中打断点运行,如下
可以看到三个线程
对于单核CPU来说,某一时刻只能有一个线程在执行(微观串行),从宏观角度来说,多个线程在同时执行(宏观并行)。
对于双核或双核以上的CPU来说,可以真正做到微观并行。
相关推荐
线程是操作系统分配处理器时间的基本单位,一个进程可以包含多个线程,它们共享相同的内存空间,包括全局变量、静态变量等。每个线程有自己的程序计数器、栈和局部变量,这使得线程间通信更为高效。 二、创建线程 ...
### Java多线程详解:深度探索Java线程机制 #### 知识点一:线程与进程的区别 在深入探讨Java多线程之前,我们首先需要理解线程与进程的基本概念及其区别。进程是资源分配的基本单位,拥有独立的内存空间,而线程...
首先,理解线程的基本概念至关重要。线程是程序中一个单一的顺序控制流,它在程序的上下文中运行,但具有独立的执行路径。多线程则是指在单个程序内同时运行多个不同的线程,每个线程执行不同的任务。线程共享同一份...
Java多线程详解 在Java编程中,多线程是一种重要的技术,它使得程序能够同时执行多个任务,提高系统的效率和响应性。本教程将详细讲解Java中的多线程概念,包括线程的创建、状态、同步以及高级主题,旨在帮助初学者...
以上是对"Java多线程详解"主题的详细阐述,涵盖了Java多线程的基本概念、实现方式、线程控制、线程池、并发集合、线程间通信以及并发编程中常见的问题和解决方案。学习和熟练掌握这些内容对于开发高效的多线程Java...
### VisualC++多线程编程详解 #### 一、多线程编程的必要性与问题引入 在软件开发中,特别是在需要处理大量计算或等待I/O操作的场景下,单线程程序往往不能充分利用现代多核处理器的潜力,且容易出现用户界面卡顿...
通过学习《C#多线程编程详解》,读者不仅能掌握多线程编程的基本原理和技术,还能了解到如何运用这些知识来解决实际问题。本书适合所有希望提高自己在多线程编程方面技能的C#开发者阅读,无论是初学者还是有经验的...
### 并发服务器—多线程服务器详解 #### 一、引言 在现代软件开发中,特别是网络应用和服务的设计中,对并发处理能力的需求日益增长。为了满足高并发访问的需求,开发人员常采用多线程技术来构建高效、响应迅速的...
在Windows操作系统中,进程是资源分配的基本单位,而线程则是执行的基本单位。一个进程可以包含多个线程,每个线程拥有独立的栈指针、程序计数器等寄存器,但共享同一代码区,这意味着它们可以执行相同的函数。 ...
### JAVA多线程编程详解 #### 一、深入理解多线程 多线程机制是现代编程语言中处理并发操作的关键技术之一,尤其在Java中,多线程提供了高效的资源利用方式,允许程序中多个指令流同时运行,提高程序执行效率。每...
线程是操作系统分配CPU时间的基本单位,每个线程都有自己的程序计数器、寄存器和栈空间,共享同一块内存区域。在Java中,线程有两种创建方式:通过实现`Runnable`接口或继承`Thread`类。实现`Runnable`接口更为灵活...
线程池的基本使用如下: ```java ExecutorService executor = Executors.newFixedThreadPool(5); // 创建固定大小的线程池 executor.execute(new Runnable() { public void run() { // 任务代码 } }); executor....
3. **线程**:线程是进程内的执行流,是操作系统调度的基本单位。线程共享进程的地址空间,拥有自己的堆栈,用于存储函数调用时的参数和局部变量。多线程可以在一个进程中并发执行,通过线程同步机制(如临界区、...
在操作系统中,进程是资源分配的基本单位,它拥有独立的内存空间,进程之间通信较为困难,通常需要借助信号机制或消息机制。进程可以看作是程序的一次执行,每个进程都有自己的内存空间,运行时其内部数据互不影响。...
### Android多线程处理详解 #### 一、Android进程与线程基础 在深入探讨Android中的多线程处理之前,我们需要先理解Android的基本进程和线程模型。 **Android进程:** 当一个Android应用首次启动时,系统会为该...
进程和线程是计算机操作系统中的两个基本概念,对于任何软件开发者,尤其是系统级或服务器端开发者来说,理解和掌握它们至关重要。下面将详细解释这两个概念,以及它们在实际应用中的作用。 首先,我们来理解“进程...