初步学习Java中线程的实现与生命周期

初步学习Java中线程的实现与生命周期攻略

什么是线程?

  • 线程是程序执行的一个单元,也是进程内的一个独立控制流。

  • 一个进程中可以有多个线程,它们共享内存空间和一些进程级的数据,但每个线程有自己的计数器、栈空间及局部变量。

  • 线程的使用可以提高程序的效率。

常用的线程实现方式

Java中有两种创建线程的方式:继承Thread类和实现Runnable接口。

继承Thread类

public class MyThread extends Thread {
    public void run() {
        // 线程执行的代码
        System.out.println("Thread is running...");
    }

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

实现Runnable接口

public class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的代码
        System.out.println("Thread is running...");
    }

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

线程生命周期

线程的生命周期包括5个状态:新建、就绪、运行、阻塞、死亡。

新建状态

当使用new关键字创建一个线程对象时,线程处于新建状态。

就绪状态

当线程对象被创建后,调用start()方法后,线程进入就绪状态,等待获取CPU调用run()方法开始执行。

public class MyThread extends Thread {

    public void run() {
        // 线程执行的代码
        System.out.println("Thread is running...");
    }

    public static void main(String[] args) {
        MyThread myThread1 = new MyThread();
        MyThread myThread2 = new MyThread();
        MyThread myThread3 = new MyThread();

        myThread1.start(); // 就绪状态
        myThread2.start(); // 就绪状态
        myThread3.start(); // 就绪状态
    }
}

运行状态

当线程获得CPU时间片以后,进入运行状态。

public class MyThread extends Thread {

    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("Thread is running: " + i);
        }
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 就绪状态

        System.out.println("Main thread is running...");

        try {
            myThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Main thread is over.");
    }
}

阻塞状态

当线程因为某些原因(如等待I/O操作、调用sleep()方法)不能继续执行时,进入阻塞状态。

public class MyThread extends Thread {

    public void run() {
        System.out.println("Thread is running...");
        try {
            Thread.sleep(5000); // 线程进入阻塞状态,等待5秒钟
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Thread is over.");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 就绪状态
        System.out.println("Main thread is running...");
    }
}

死亡状态

线程执行完run()方法后,线程进入死亡状态。

public class MyThread extends Thread {

    public void run() {
        System.out.println("Thread is running...");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 就绪状态

        try {
            myThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Thread is over.");

    }
}

示例说明

示例一

public class MyThread extends Thread {

    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("Thread is running: " + i);
        }
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 就绪状态

        System.out.println("Main thread is running...");

        try {
            myThread.join(); // 等待子线程结束
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Main thread is over.");
    }
}

该示例中,我们继承了Thread类,重写了run()方法,实现了一个简单的多线程程序。在main()方法中,我们创建了一个MyThread对象,并且通过start()方法启动线程,进入就绪状态。

在主线程中,我们通过调用join()方法来等待子线程执行完成后再执行主线程。

示例二

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("Thread is running...");
    }

    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start(); // 就绪状态

        System.out.println("Main thread is running...");
    }
}

该示例中,我们实现了Runnable接口,重写了run()方法,创建了Thread对象,并且将MyRunnable对象作为参数传递给Thread的构造方法中。通过start()方法启动线程,进入就绪状态。

在主线程中,我们直接调用System.out.println()方法来输出信息。可以看到子线程是在主线程之后执行的,因为它处于不同的线程之中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:初步学习Java中线程的实现与生命周期 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • iPhone13内存不够怎么解决 iPhone13显示内存不足怎么办

    iPhone 13内存不够的解决方法 如果你的iPhone 13显示内存不足的错误信息,不要担心,有几种方法可以解决这个问题。下面是一些解决iPhone 13内存不够的方法: 1. 清理iPhone 13上的无用数据 清理无用数据是解决内存不足问题的第一步。以下是一些可以清理内存的方法: 删除不需要的应用程序:打开iPhone 13的主屏幕,长按不需要的应用…

    other 2023年8月1日
    00
  • 华为荣耀6开发人员选项在哪里?怎么开启?

    首先我们需要了解一下什么是开发人员选项。 开发人员选项是Android中一个相对高级的设置选项,允许用户访问开发者选项、USB调试模式、OEM解锁以及更多高级设置。这些选项对于开发人员较为重要,但并不适合所有用户开启。 那么接下来,我将会给大家介绍华为荣耀6开发人员选项在哪里以及如何开启。 测量开发人员选项 打开设置。 向下滚动,找到“关于手机”并点击。 在…

    other 2023年6月28日
    00
  • visualsvn-server安装以及使用教程

    VisualSVN Server安装以及使用教程 简介 VisualSVN Server 是一个免费的 Subversion 服务器,可以在 Windows 环境下快速地建立和部署 Subversion 服务,可以为不同的项目提供一个稳定的版本管理平台。 安装步骤 下载 VisualSVN Server 打开 VisualSVN Server 官方网站 (h…

    其他 2023年3月29日
    00
  • PHP对文件夹递归执行chmod命令的方法

    要对文件夹及其子文件夹中的文件进行chmod命令操作,在PHP中可以使用递归函数来实现。下面是PHP对文件夹递归执行chmod命令的方法的攻略: 步骤1:定义递归函数 首先需要定义一个递归函数,用来对传入的目录及其子目录中的文件进行chmod命令操作。下面是一个示例: function chmodDir($dir, $fileMode, $dirMode) …

    other 2023年6月27日
    00
  • github上下载源代码的方法

    以下是详细讲解“GitHub上下载源代码的方法的完整攻略”,过程中至少包含两条示例说明的标准Markdown格式文本: GitHub上下载源代码的方法的完整攻略 GitHub是一个非常流行的代码托管平台,许多开源项目都托管在GitHub上。本文将介绍如何在GitHub上下载源代码,包括使用Git命令和直接下载ZIP文件种方法。 使用Git命令下载源代码 以下…

    other 2023年5月10日
    00
  • VFP与其他应用程序的集成

    为了将VFP与其他应用程序进行集成,可以使用多种方法和技术。下面详细讲解一下几种集成方法和技术。 使用OLE和COM对象 OLE和COM对象是一种常用的集成方法,可将VFP应用程序连接到其他应用程序。下面是一个示例,将VFP与Word应用程序进行集成。 步骤一:创建Word文档 在Word中创建一个新文档,然后保存在本地计算机上。文档路径可以在后面的代码中使…

    other 2023年6月25日
    00
  • Iphone手机信息如何自动回复解决方案

    下面是详细讲解: Iphone手机信息自动回复解决方案 在日常生活和工作中,我们常常遇到一些情况需要自动回复手机信息,比如会议期间、驾车途中或者其他需要保持专注或安全的情况下,我们无法及时回复短信或者电话。 Iphone手机自动回复功能可以帮助我们在这些情况下保持高效和便捷,本文将详细讲解如何使用Iphone手机自动回复功能。 步骤一:打开“自动回复”功能 …

    other 2023年6月26日
    00
  • ExtJS4 表格的嵌套 rowExpander应用

    { id: 1, name: ‘John Doe’, email: ‘john@example.com’, phone: ‘1234567890’, address: ‘123 Main St’ }, { id: 2, name: ‘Jane Smith’, email: ‘jane@example.com’, phone: ‘0987654321’, ad…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部