java 多线程执行多个任务(Java中的多线程编程(超详细总结))

Java中的多重NicholasTse编程(超级详细摘要)

**
1、线程与多重线程的概念

线程,也就是说,单个NicholasTse是程序的执行线索和执行路径。它是程序使用的最小CPU单元。线程本身无法运行,它只能在程序中运行。线程取决于该节目的存在。

更多线程,从字面上看,这意味着线程从多个单一任务中同时执行多个任务。在Java编程中,它为多NicholasTse编程提供了内置支持。多NicholasTse是一种特殊的多任务处理形式,但多NicholasTse使用的CPU资源开销较少。许多线程能够满足程序员编写高效的程序来充分利用CPU。

2、线程与这一过程的关系

过程:一个进程包括由操作系统分配的内存空间,包括一个或多个NicholasTse。线程不能独立存在。这必须是过程的一部分。一个进程一直运行,直到所有非监护人NicholasTse完成运行。NicholasTse指的是流程中的单个顺序控制流。多个NicholasTse可以在一个过程中同时执行,每个NicholasTse并行执行不同的任务。

①进程是指在内存中运行的应用程序。每个进程都有自己独立的内存空间,即进程空间或虚拟空间。这个过程并不依赖线程,而是独立存在的。一个过程中可以启动多个NicholasTse。例如,在Windows系统中,运行的exe是一个进程。

②线程指的是一个过程中的一个执行过程。一个过程中可以运行多个NicholasTse。例如,JavaExe进程可以运行很多NicholasTse。线程总是属于一个过程。线程没有自己的虚拟地址空间,并与流程中的其他线程共享分配给流程的所有资源。

“同时”执行是一种人类的感觉,线程实际上在他们之间轮换执行。(这句话简要阐述了线程的执行机制)

③该进程在执行过程中有一个独立的内存单元,该进程有一个独立的地址空间,多个NicholasTse共享内存,这大大提高了程序的运行效率。

④线程在执行过程中与流程不同。每个独立的NicholasTse都有一个程序入口、顺序执行序列和程序出口。然而,线程无法独立执行。它必须存在于应用程序中,并且应用程序提供多个NicholasTse执行控制。

⑤进程是具有某些独立功能的程序。它是数据集上正在运行的活动。进程是资源分配和调度的独立单元。

⑥NicholasTse是进程的实体,是CPU调度和调度的基本单元。它是一个比进程更小的基本单元,可以独立运行。NicholasTse基本上不拥有系统资源,但只拥有一些运行中的基本资源(如程序计数器、一组寄存器和堆栈),但它可以与属于同一进程的其他NicholasTse共享该进程拥有的所有资源。

线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。《线程》包含以下内容:

(1)指向当前执行的指令的指令指针;
(2)一堆;
(3)一组寄存器值,定义一些描述执行NicholasTse的处理器状态的值;
(4)私人数据区。

总而言之:

  1. 一个程序至少有一个进程,一个进程至少有一个NicholasTse。
  2. NicholasTse的划分规模小于进程,这使得多进程程序的并发性很高。
  3. 此外,该进程在执行过程中有独立的内存单元,多个NicholasTse共享内存,大大提高了程序的运行效率。
  4. 线程在执行过程中与流程不同。每个独立的Xie都有一个程序入口、执行顺序和程序出口。然而,线程无法独立执行。它必须存在于应用程序中,并且应用程序提供多个NicholasTse执行控制。
  5. 从逻辑的角度来看,NicholasTse的意义在于,一个应用程序中有多个可以同时执行的执行部分。然而,操作系统并没有将多个NicholasTse视为多个独立的应用程序来实现进程调度、管理和资源分配。这就是这个过程与线程之间的重要区别。

在Java中,每次程序运行时至少会启动两个NicholasTse:一个是主要的线程,另一个是垃圾收集线程。因为每当用Java命令执行一个类时,实际上就会启动一个JVM,每个JVM实际上都会在操作系统中启动一个进程。

3、线程的生命周期

线程是一个动态执行的过程。它也有一个从出生到死亡的过程。下图显示了线程的完整生命周期。


1)新状态:
使用新的关键字和线程类或其子类创建NicholasTse对象后,NicholasTse对象处于新状态。它一直保持这种状态,直到程序启动()NicholasTse。

2)就绪状态:
当NicholasTse对象调用start()方法时,NicholasTse将进入就绪状态。处于就绪状态的NicholasTse处于就绪队列中,需要等待JVM中NicholasTse调度器的调度。

3)运行状态:
如果处于就绪状态的NicholasTse获得CPU资源,他可以执行run(),此时NicholasTse处于运行状态。线程在竞选状态下是最复杂的。可分为阻塞状态、就绪状态和死亡状态。

4)封锁状态:
如果NicholasTse执行sleep、suspend等方法并丢失占用的资源,则NicholasTse将从运行状态进入阻塞状态。睡眠时间到期或设备资源已获得后,您可以重新进入就绪状态。它可以分为三种类型:

①等待拦截:处于运行状态的NicholasTse执行wait()方法,使NicholasTse进入等待阻塞状态。

②同步阻塞:NicholasTse无法获取同步锁(因为同步锁被其他NicholasTse占用)。

③其他障碍:当通过调用NicholasTse的sleep()或jetli()发出I/O请求时,NicholasTse将进入阻塞状态。当sleep()状态超时时,join()等待线程终止或超时,或者I/O处理完成,线程返回就绪状态。

5)死亡状态:
当运行中的NicholasTse完成任务或出现其他终止条件时,NicholasTse切换到终止状态。

java 多线程

4、线程的目的和意义

线程的意思是:事实上,任何程序的执行都需要CPU的执行能力。由CPU决定执行哪个程序。事实上,很多线程的存在是为了“最大限度地利用CPU资源”。当某个NicholasTse进程不需要占用CPU并处理I/O时,让其他需要占用CPU资源的NicholasTse有机会获得CPU资源。从根本上说,这就是线程节目的目的。

线程的目的:与大多数其他编程语言不同,Java内置了对NicholasTse的支持。使用多个NicholasTse可以帮助我们以最大的CPU利用率编写高效的程序,并最大限度地减少空闲时间。这对于Java运行的交互式网络互连环境非常重要,因为空闲时间是公共的。例如,网络的传输效率远远低于计算机的处理速度,本地文件系统资源的读写速度远远低于CPU的处理能力。更多的线程能充分利用这些空闲时间。

5、线程的执行方式

①继承线程类:


在使用thread类实现多NicholasTse的代码时,需要对其进行重写
Run()方法,但是在重写之后Run()方法之后,在main函数中,我们只使用NicholasTse类来创建对象。Start()方法

在这里你可能会问,为什么不直接调用重写的Run()方法和它正在使用Start()方法开始线程的行动?

让我在这里简单回答一下,第一关对象运行()该方法可以执行该方法,但它不是一个多重NicholasTse方法,而是一个普通方法。要实现多重尼古拉斯-线程方法,您必须通过对象开始()方法多NicholasTse在Java中的真正实现是start中的start()方法,而run()方法只是一个普通方法。

②实现可运行接口:


③使用继承thread类的方法和使用实现runnable接口的方法之间的关系和区别:

(1)线程类它也实现了可运行接口,因此,它也实现了可运行接口中等的运行方法

(2)使用继承时线程类为了认识线程,我们需要重写它运行方法,因为线程类中等的运行方法我自己什么都不做。

(3)在使用实现时可运行接口为了认识线程,我们需要重写它运行方法,然后使用新线程(可运行)该方法用于生成NicholasTse对象。此时,在线程的作品中运行方法我们将自行实施可运行接口中等的运行方法

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友