首页
学习
活动
专区
圈层
工具
发布

java线程的创建和管理(一)

Java 是一种多线程的编程语言,它可以支持多线程并发执行,提高程序的运行效率和性能。在 Java 中,线程的创建和管理是非常重要的内容。本文将详细介绍 Java 线程的创建和管理,包括线程的概念、创建线程的方法、线程状态的转换、线程同步与互斥等内容。

一、线程的概念

线程是指进程中的一条执行路径,每个线程都有自己的程序计数器、栈和本地变量表等资源。多个线程共享进程的堆和方法区等资源。线程是程序的最小执行单位,可以同时执行多个线程,实现程序的并发执行。

在 Java 中,线程是通过 Thread 类来实现的。每个线程都是一个 Thread 类的实例,可以通过调用 Thread 类的构造函数创建线程。

二、创建线程的方法

Java 中创建线程有两种方法:一种是继承 Thread 类并重写 run() 方法,另一种是实现 Runnable 接口并实现 run() 方法。两种方法的区别在于前者需要直接继承 Thread 类,而后者则可以继承其他类或实现其他接口。

继承 Thread 类

创建线程的方法之一是继承 Thread 类并重写 run() 方法。在 run() 方法中编写线程的执行代码,调用 start() 方法启动线程。

Java 实现代码:

代码语言:javascript
复制
public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + ": " + i);
        }
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        t1.start();
        t2.start();
    }
}

在该例子中,我们定义了一个 MyThread 类,继承了 Thread 类,并重写了 run() 方法。在 run() 方法中,我们使用 for 循环输出线程的名称和循环变量。在 main() 方法中,我们创建了两个线程 t1 和 t2,并分别调用它们的 start() 方法来启动线程。

实现 Runnable 接口

创建线程的方法之二是实现 Runnable 接口并实现 run() 方法。在 run() 方法中编写线程的执行代码,创建一个 Thread 对象并将 Runnable 对象作为参数传入,调用 start() 方法启动线程。

Java 实现代码:

代码语言:javascript
复制
public class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + ": " + i);
        }
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        MyRunnable r1 = new MyRunnable();
        MyRunnable r2 = new MyRunnable();
        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);
        t1.start();
        t2.start();
    }
}

在该例子中,我们定义了一个 MyRunnable 类,实现了 Runnable 接口,并重写了 run() 方法。在 run() 方法中,我们使用 for 循环输出线程的名称和循环变量。在 main() 方法中,我们创建了两个 MyRunnable 对象 r1 和 r2,分别创建了两个 Thread 对象 t1 和 t2,并将 MyRunnable 对象作为参数传入。然后,我们分别调用 t1 和 t2 的 start() 方法启动线程。

三、线程状态的转换

Java 中的线程状态有多种,包括新建、就绪、运行、阻塞和死亡等状态。线程状态的转换如下:

  • 新建状态:线程被创建但未调用 start() 方法。
  • 就绪状态:线程调用 start() 方法后,进入就绪状态,等待 CPU 分配资源,准备运行。
  • 运行状态:线程获得 CPU 时间片,开始执行 run() 方法。
  • 阻塞状态:线程因为某些原因被暂停执行,等待一些资源的释放或某个条件的满足。比如线程在执行 sleep()、wait()、join() 等方法时,就会进入阻塞状态。
  • 死亡状态:线程执行完 run() 方法后,线程就会进入死亡状态。
下一篇
举报
领券