java线程状态以及创建方式

Java线程6种状态

在Java中,线程(Thread)可以处于以下6种状态之一,这些状态在java.lang.Thread.State枚举中定义:

  1. NEW(新建):线程已经被创建,但是还没有调用start()方法。

  2. RUNNABLE(可运行):线程正在Java虚拟机中执行。它可能正在运行,也可能正在等待CPU资源分配以运行。此状态包括传统的“就绪(Ready)”状态和“运行(Running)”状态。

  3. BLOCKED(阻塞):线程被阻塞,等待监视器锁(monitor lock),以进入一个同步块/方法,或者在调用了Object.wait()之后,重新进入同步块/方法。

  4. WAITING(等待):线程无限期地等待另一个线程执行特定操作。例如,调用了Object.wait()(没有超时值)的线程、调用了Thread.join()(没有指定超时值)的线程,或者LockSupport.park()的线程。

  5. TIMED_WAITING(计时等待):线程等待另一个线程执行一个(有时间限制的)动作。例如,调用了Thread.sleep()Object.wait()(带有超时值)、Thread.join()(带有超时值),或者LockSupport.parkNanos()/LockSupport.parkUntil()的线程。

  6. TERMINATED(终止):线程已经退出,无法再次启动。

Java线程的工作原理

线程的调度是由Java虚拟机(JVM)和/或操作系统共同管理的。当一个线程处于RUNNABLE状态时,它可能正等待操作系统分配给它CPU时间,一旦分配到CPU时间,JVM就会选择一个线程来运行。线程调度通常不是由Java代码直接控制的,而是由操作系统根据其调度算法进行处理。

当线程执行同步代码块时,它可能因为对象锁而处于BLOCKED状态。如果线程需要等待某个条件成立,它可以通过调用Object.wait()方法进入WAITING状态。当其他线程调用相同对象的notify()notifyAll()时,它可以从WAITING状态退出。TIMED_WAITING状态类似,但有时间限制。

一旦线程的run()方法执行完成,线程会自动进入TERMINATED状态。

Java创建线程的方式

在Java中,创建和启动一个新线程主要有两种方式:

  1. 继承Thread类
public class MyThread extends Thread {
    @Override
    public void run() {
        // 执行任务的代码
    }

    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // 启动线程
    }
}
  1. 实现Runnable接口
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 执行任务的代码
    }

    public static void main(String[] args) {
        Thread t = new Thread(new MyRunnable());
        t.start(); // 启动线程
    }
}

推荐使用第二种方式实现Runnable接口,因为这样可以保留类的继承链,更加灵活。Java 8 引入的Lambda表达式可以使这一过程更加简洁:

new Thread(() -> {
    // 执行任务的代码
}).start();

此外,Java还提供了java.util.concurrent包中的高级并发API,如ExecutorServiceThreadPoolExecutor,它们可以用来管理线程池,更加高效地执行并发任务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值