初步学习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日

相关文章

  • yeelink初探

    以下是“Yeelink初探”的完整攻略: Yeelink初探 Yeelink是一个物联网平台,可以帮助我们连接和管理各种设备,包括传感器、摄像头、智能家居设备等。本攻略将详细讲解何使用Yeelink平台,包括创建设备、上传数据、查看数据等。 创建设备 在Yeelink平台上创建设备常简单,只需要按照以下步骤操作: 登录Yeelink平台,进入控制台页面。 点…

    other 2023年5月8日
    00
  • Android LeakCanary检测内存泄露原理

    Android LeakCanary检测内存泄露原理 引言 内存管理是Android开发中必须面对的问题之一,Android LeakCanary(以下简称LeakCanary)是目前最流行的检测内存泄露的库之一。它可以帮助我们快速、准确地检测应用中的内存泄露问题。本文将详细讲解LeakCanary检测内存泄露的原理,以及如何在实际项目中使用LeakCana…

    other 2023年6月27日
    00
  • DHCP不能分配IP地址怎么办

    DHCP不能分配IP地址的解决攻略 1. 检查网络连接 首先,确保网络连接正常。检查以下几个方面: 确认网络电缆是否连接到正确的端口。 检查路由器或交换机的状态灯,确保它们正常工作。 尝试连接其他设备,如手机或平板电脑,以确定是否存在网络问题。 如果网络连接正常,但DHCP仍然无法分配IP地址,请继续以下步骤。 2. 检查DHCP服务器设置 DHCP服务器可…

    other 2023年7月30日
    00
  • 青柠直播怎么查看版本号?青柠直播查看版本号方法

    青柠直播查看版本号攻略 青柠直播是一款流行的直播平台,如果你想查看青柠直播的版本号,可以按照以下步骤进行操作: 步骤一:打开青柠直播应用 首先,你需要打开青柠直播应用。你可以在手机的应用列表中找到青柠直播的图标,点击它以打开应用。 步骤二:进入设置页面 一旦你成功打开了青柠直播应用,你需要进入设置页面来查看版本号。通常,设置页面可以通过点击应用界面右上角的菜…

    other 2023年8月3日
    00
  • win7鼠标右键菜单如何删除呢?

    要删除Win7鼠标右键菜单,可以通过以下步骤进行操作: 1. 打开注册表编辑器 按下“Win + R”键,弹出运行窗口,输入“regedit”并回车打开注册表编辑器。 2. 定位到需要删除的项 在注册表编辑器中定位到需要删除的右键菜单,通常情况下,它们都位于以下路径: HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandle…

    other 2023年6月27日
    00
  • Win10 Mobile年度更新预览版14327中商店应用更新通知回归

    Win10 Mobile年度更新预览版14327中商店应用更新通知回归攻略 简介 在Win10 Mobile年度更新预览版14327中,商店应用更新通知功能得到了回归。这意味着当您的设备上有可用的商店应用更新时,您将收到通知。以下是详细的攻略,以帮助您了解如何使用这一功能。 步骤 确保设备已更新至Win10 Mobile年度更新预览版14327:首先,确保您…

    other 2023年8月3日
    00
  • foreach中的index

    foreach中的index 在PHP中,foreach是一种常用的循环语句,它可以遍历数组和对象并执行相应的代码。在foreach循环中,我们有时会需要获取当前元素在数组中的位置,这时我们可以使用foreach中的index。 Syntax foreach循环中,我们可以通过如下方式获取当前元素在数组中的位置: foreach ($array as $in…

    其他 2023年3月29日
    00
  • 在phpstudy中nginx伪静态配置

    在phpstudy中nginx伪静态配置 伪静态是指将动态链接通过一定规则转化为静态链接的一种技术。在nginx环境下,可以通过配置伪静态来优化网站的SEO、缓存效果等,从而提高网站的访问速度和用户体验。 为什么需要phpstudy中nginx伪静态配置 许多网站使用PHP为网站构建动态页面,利用PHP的文本处理能力实现网站数据的输出和处理。而PHP文件本身…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部