java的线程是什么_Java多线程:什么是线程

一 基本概念

多任务:同一时刻运行多个程序的能力。每一个任务称为一个线程。可以同时运行一个以上线程的程序称为多线程程序。

Java 编写程序都运行在在 Java 虚拟机(JVM)中,在 JVM 的内部,程序的多任务是通过线程来实现的。每用 java 命令启动一个 java 应用程序,就会启动一个 JVM 进程。在同一个 JVM 进程中,有且只有一个进程,就是它自己。在这个 JVM 环境中,所有程序代码的运行都是以线程来运行。

一般常见的 Java 应用程序都是单线程的。比如,用 java 命令运行一个最简单的 HelloWorld 的 Java 应用程序时,就启动了一个 JVM 进程,JVM 找到程序程序的入口点 main(),然后运行 main() 方法,这样就产生了一个线程,这个线程称之为主线程。当 main 方法结束后,主线程运行完成。JVM 进程也随即退出 。

对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。

进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在 Windows 系统中,一个运行的 exe 就是一个进程。

线程是指进程中的一个执行流程,一个进程可以运行多个线程。比如 java.exe 进程可以运行很多线程。线程总是输入某个进程,进程中的多个线程共享进程的内存。

Java 中线程是指 java.lang.Thread 类的一个实例或线程的执行。使用 java.lang.Thread 或 java.lang.Runnable 接口编写代码定义、实例化、启动新线程。

Java 中每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行。main() 方法运行在一个线程内,称为主线程。一旦创建一个新的线程,就产生一个新的调用栈。

线程分为两类:用户线程和守候线程。当所有用户线程执行完毕后,JVM 自动关闭。但是守候线程却不独立与 JVM,守候线程一般是有操作系统或用户自己创建的。

二 定义线程

1 扩展 java.lang.Thread 类以及实现 java.lang.Runnable 接口。

此类中有 run() 方法,public void run(),如果该线程是独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run() 方法;否则,该方法不执行任何操作。Thread 的子类也应该重写该方法。

三 实例化线程

1 如果是扩展了 java.lang.Thread 类的线程,则直接调用 new 即可。

2 如果是实现了 jav.lang.Runnable 接口的类,则调用 Thread 的构造方法:

Thread(Runnable target)

Thread(Runnable target,String name)

Thread(ThreadGroup group, Runnable target)

Thread(ThreadGroup group, Runnable target, String name)

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

四 启动线程

在线程的 Thread 对象上调用 start() 方法,而不是 run() 或别的方法。

在调用 start() 方法之前,线程处于新状态中,新状态有一个 Thread 对象,但没有一个真正的线程。

在调用 start() 方法之后,发生了一系列复杂的事情:

启动新的执行线程 (具有新的调用栈);

该线程从新状态转移到可运行状态;

当该线程获得执行机会时,其目标 run() 方法将运行。

五 注意事项

1 获取当前线程的对象的方法是:Thread.currentThread();

2 当线程目标 run() 方法结束时该线程完成。

3 一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且只能一次。一个可运行的线程或死线程可以被重新启动。

4 线程的调度是 JVM 的一部分,在一个 CPU 的机器上上,实际上一次只能运行一个线程。一次只有一个线程栈执行。JVM 线程调度程序决定实际运行哪个处于可运行状态的线程。众多可运行线程中的某一个会被选中做为当前线程。可运行线程被选择运行的顺序是没有保障的。

5 尽管通常采用队列形式,但这是没有保障的。队列形式是指当一个线程完成 “一轮” 时,它移到可运行队列的尾部等待,直到它最终排队到该队列的前端为止,它才能被再次选中。事实上,我们把它称为可运行池而不是一个可运行队列,目的是帮助认识线程并不都是以某种有保障的顺序排列一个队列的事实。

6 尽管我们没有无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值