详解Java线程的创建及休眠

详解Java线程的创建及休眠

线程的概念

Java 线程是一条执行路径,每个线程都是独立的,它们之间不会相互影响,每个线程有自己的计数器、栈和程序计数器。线程是轻量级的,因为创建和销毁线程所需的时间和资源相对较少。

Java线程的创建

Java 线程是通过 Thread 类来实现的。创建线程的方式有两种,分别是:

继承 Thread 类

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

MyThread thread = new MyThread();
thread.start();

实现 Runnable 接口

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

MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();

线程的休眠

线程休眠是指暂停当前线程的执行,让出 CPU 时间片,让其他线程或进程得到执行机会。Java 中线程的休眠由 Thread 类的 sleep() 方法实现。

try {
    // 休眠3秒
    Thread.sleep(3000);
} catch(InterruptedException ex) {
    ex.printStackTrace();
}

示例说明

示例1:继承 Thread 类

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    public void run() {
        System.out.println(name + " is running.");
        try {
            // 休眠5秒
            Thread.sleep(5000);
        } catch(InterruptedException ex) {
            ex.printStackTrace();
        }
        System.out.println(name + " is complete.");
    }
}

// 创建两个线程
MyThread thread1 = new MyThread("Thread1");
MyThread thread2 = new MyThread("Thread2");

// 启动线程
thread1.start();
thread2.start();

此示例中,我们创建了两个继承了 Thread 类的线程,分别为 thread1 和 thread2,它们执行时会打印出自己的名称,并且在执行过程中休眠了 5 秒钟。输出结果可能是:

Thread1 is running.
Thread2 is running.
Thread1 is complete.
Thread2 is complete.

示例2:实现 Runnable 接口

public class MyRunnable implements Runnable {
    private String name;
    public MyRunnable(String name) {
        this.name = name;
    }
    @Override
    public void run() {
        System.out.println(name + " is running.");
        try {
            // 休眠5秒
            Thread.sleep(5000);
        } catch(InterruptedException ex) {
            ex.printStackTrace();
        }
        System.out.println(name + " is complete.");
    }
}

// 创建两个线程
MyRunnable runnable1 = new MyRunnable("Thread1");
MyRunnable runnable2 = new MyRunnable("Thread2");

// 创建线程对象
Thread thread1 = new Thread(runnable1);
Thread thread2 = new Thread(runnable2);

// 启动线程
thread1.start();
thread2.start();

此示例中,我们创建了两个实现了 Runnable 接口的线程,分别为 runnable1 和 runnable2,它们执行时会打印出自己的名称,并且在执行过程中休眠了 5 秒钟。输出结果可能是:

Thread1 is running.
Thread2 is running.
Thread1 is complete.
Thread2 is complete.

总结

Java 的线程机制可以进一步优化程序的性能。线程的创建分两种方式:继承 Thread 类和实现 Runnable 接口。线程的休眠可以通过 sleep() 方法实现,让出 CPU 时间片,让其他线程或进程得到执行机会。在多线程编程中,线程的协作和同步非常重要,需要注意线程的安全问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java线程的创建及休眠 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java编程实现基于用户的协同过滤推荐算法代码示例

    首先来讲解一下“Java编程实现基于用户的协同过滤推荐算法”的完整攻略。 1.什么是协同过滤推荐算法 协同过滤推荐算法是一种根据用户的历史行为来推荐相似物品的算法。它与传统的推荐算法相比,具有更高的精度和个性化的特点。协同过滤推荐算法分为两种类型,即基于用户的协同过滤和基于物品的协同过滤。 2.基于用户的协同过滤推荐算法实现 基于用户的协同过滤推荐算法实现分…

    Java 2023年5月19日
    00
  • Spring Boot2.0 @ConfigurationProperties使用详解

    下面是“Spring Boot2.0 @ConfigurationProperties使用详解”的完整攻略。 简介 在Spring Boot应用中,常常需要使用到大量的配置属性。为了提高可维护性,Spring Boot提供了@ConfigurationProperties注解,允许开发者将配置属性注入到Java Bean中,并进行统一管理。 @Configu…

    Java 2023年5月31日
    00
  • Java的DataInputStream和DataOutputStream数据输入输出流

    DataInputStream和DataOutputStream是Java中常用的数据输入输出流,它们提供了一种用于串行化和反串行化基本java数据类型的方法。在处理二进制数据时,这两个类可以很好的对数据进行读和写操作。下面就来详细讲解这两个输入输出流的使用。 DataInputStream DataInputStream是一种基于字节流的数据输入流。在使用…

    Java 2023年5月26日
    00
  • java对同一个文件进行读写操作方法

    要在Java中对同一个文件进行读写操作,我们可以使用Java的File类和I/O流,具体方法如下: 使用File类实例化File对象来代表文件。可以在实例化File对象时指定文件的路径和文件名,例如: File file = new File("path/to/file.txt"); 其中,”path/to/file.txt”应替换为实际…

    Java 2023年5月19日
    00
  • asp.net 根据汉字的拼音首字母搜索数据库(附 LINQ 调用方法)

    我来为您讲解如何使用ASP.NET根据汉字的拼音首字母搜索数据库。具体实现方式可以分为以下三步骤: 构建拼音首字母索引 由于直接对汉字进行搜索会比较困难,因此我们需要将汉字转换成拼音,且只需要保留拼音的首字母,然后再进行搜索。 在ASP.NET中,我们可以使用Microsoft提供的PinyinConverter库来实现拼音转换。具体操作步骤如下: usin…

    Java 2023年5月19日
    00
  • 详解SpringMVC重定向传参数的实现

    接下来我将为你讲解“详解SpringMVC重定向传参数的实现”的完整攻略。 标题 介绍 在SpringMVC中,有时候需要在重定向跳转的时候把一些参数传递过去,以便在下一个请求中使用。本文将详细讲解如何在SpringMVC中实现重定向传参数。 实现步骤 第一步:使用RedirectAttributes添加Flash属性 SpringMVC提供了Redirec…

    Java 2023年6月15日
    00
  • spring boot 默认异常处理的实现

    Spring Boot 默认的异常处理机制可以根据不同的异常类型,自动返回对应的 HTTP 状态码,同时输出异常信息,帮助我们快速定位错误。 默认情况下,无需显式配置,Spring Boot 就可以捕获控制器方法抛出的异常及一些框架内部异常。当异常被捕获后,Spring Boot 会根据异常类型来自动选择以下处理步骤: 如果是 HTTP 400 错误,返回 …

    Java 2023年5月27日
    00
  • 图文详解Java线程和线程池

    图文详解Java线程和线程池 什么是线程 线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,线程共享进程资源,但是是CPU分配资源的独立单位。 Java中的线程 Java中的线程是使用Thread类对象来创建。Java中的线程有以下几种状态:新建状态、可运行状态、阻塞状态和死亡状态。在Java中,实现多线程有两种方式,一是继承Thread类…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部