Java中多线程的创建——实现Runnable接口

2024-05-05 18:12

本文主要是介绍Java中多线程的创建——实现Runnable接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java中多线程的创建——实现Runnable接口

在Java中,创建多线程除了通过继承Thread类外,另一种更常见且更推荐的方法是实现Runnable接口。使用Runnable接口可以让我们的代码更加灵活,因为Java不支持多重继承,但可以实现多个接口。此外,如果我们的类已经继承了其他类,那么我们就不能再继承Thread类,这时实现Runnable接口就是一个很好的选择。

实现Runnable接口创建线程

当我们实现Runnable接口时,需要重写其中的run()方法。这个方法包含了线程需要执行的代码。然后,我们可以将实现了Runnable接口的类的实例作为参数传递给Thread类的构造函数来创建线程,并调用start()方法启动线程。

下面是一个简单的示例代码,演示了如何通过实现Runnable接口来创建并启动一个线程:

// 自定义任务类,实现Runnable接口
public class MyRunnable implements Runnable {// 重写Runnable接口的run()方法,定义线程执行的代码@Overridepublic void run() {// 线程执行的代码块for (int i = 0; i < 5; i++) {// 打印当前线程的名称和执行的次数System.out.println("线程 " + Thread.currentThread().getName() + " 执行: " + i);// 为了模拟线程执行的过程,可以添加一些延迟try {Thread.sleep(100); // 线程休眠100毫秒} catch (InterruptedException e) {e.printStackTrace();}}}// 主程序入口public static void main(String[] args) {// 创建MyRunnable对象,即创建了一个可运行的任务MyRunnable myRunnable = new MyRunnable();// 使用MyRunnable对象作为参数创建Thread对象,即创建了一个线程Thread thread = new Thread(myRunnable, "自定义线程");// 启动线程,调用start()方法而不是run()方法thread.start();// 主线程继续执行其他任务或等待线程结束for (int i = 0; i < 5; i++) {System.out.println("主线程执行: " + i);try {Thread.sleep(100); // 主线程也休眠100毫秒,以便观察线程交替执行的效果} catch (InterruptedException e) {e.printStackTrace();}}// 等待自定义线程结束(可选)try {thread.join();System.out.println("自定义线程已结束");} catch (InterruptedException e) {e.printStackTrace();}}
}

代码注释说明:

  1. 我们定义了一个名为MyRunnable的类,它实现了Runnable接口。
  2. MyRunnable类中,我们重写了run()方法,定义了线程需要执行的代码。在这个例子中,我们使用了一个for循环来模拟线程的执行过程,并打印出当前线程的名称和执行的次数。
  3. main()方法中,我们创建了一个MyRunnable对象,即创建了一个可运行的任务。
  4. 然后,我们使用MyRunnable对象作为参数传递给Thread类的构造函数来创建一个新的线程,并设置了线程的名称。
  5. 调用线程的start()方法来启动线程。注意,这里不能直接调用run()方法,因为run()方法只是定义了线程要执行的代码,而start()方法才是用来启动线程的。
  6. main()方法中,我们还添加了一个for循环来模拟主线程的执行过程。通过让主线程和自定义线程都休眠100毫秒,我们可以观察到线程交替执行的效果。
  7. 最后,我们使用thread.join()方法等待自定义线程结束(这一步是可选的)。这样可以在主线程中确保自定义线程已经执行完毕,然后再继续执行主线程的其他任务。

通过运行上述代码,你将看到主线程和自定义线程交替执行的结果,从而理解通过实现Runnable接口来创建多线程的基本概念和工作原理。

这篇关于Java中多线程的创建——实现Runnable接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962343

相关文章

spring_hibernate.xml配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schem

spring boot中数据验证validated的使用

前言 spring-boot中在Controller层里面可以用@validated来校验数据再进入业务逻辑层,如果数据异常则会统一抛出异常,方便异常中心统一处理。 比如,我们判断一个输入的用户名长度限制以及密码的正则验证. 使用流程 1.Controller层数据使用@validated注解 @PostMapping("/userLogin")@ResponseBodypublic

SpringMVC日期参数转换问题Can not deserialize value of type java.util.Date from String 2018-07-19 15:59:34

问题分析 报错日志 Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserializevalue of type java.util.Date from Stringto parse Date value '2018-07-19 15:59:34': Can not parse da

Spring Boot构建应用开发规范

1.规范的意义和作用 •编码规范可以最大限度的提高团队开发的合作效率 •编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 •编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码 •规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维 2.代码仓库规范 2.1公共组件 •公共组件通常指

spring boot 启动FreeMarkerAutoConfiguration报错

问题呈现 搭建好springboot项目后启动,启动过程中出现如下报错: Cannot find template location(s): [classpath:/templates/] (please add some templates, check your FreeMarker configuration, or set spring.freemarker.checkTemplat

Spring集成MyBatis问题: No MyBatis mapper was found in '[xx.xx]' package. Please check your configuration

问题出现情况 在使用SpringBoot集成MyBatis的过程中,项目正常启动异常,控制台打出如下日志: No MyBatis mapper was found in ‘[xx.xxx]’ package. Please check your configuration. Description: A component required a bean of type ‘xx.xxx.

SpringMvc+MyBatis+Shiro整合,shiro的realm不能注入Bean

springMvc+Mybatis和shiro整合,shiro的realm引入Autowire加入接口数据,但是一直无法成功注入,提示问题如下: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.sxkj.service.inter

Java之责任链模式

一.前言 在公司一般的请假流程中,1天或者以下由组长批准,1-3天的由组长,经理审批,如果是3-7天的由组长,经理,部门领导审批,如果大于7天的则有上级批准。这种模式在设计模式里面的责任链模式可以得到很好的运用,下面用这个该模式实现体会一下责任链模式的好处。 二.定义 定义:将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能处理则处理

Java中Exception与Error的区别

前言 Java 语言在设计之初就提供了相对完善的异常处理机制,这也是 Java 得以大行其道的原因之 一,因为这种机制大大降低了编写和维护可靠程序的门槛。如今,异常处理机制已经成为现代编 程语言的标配。但是Exception与Error有什么区别呢? 区别 ######一.Error 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。例如,Java虚拟机运行错误(Virtua

JAVA的日志体系

一.前言 目前的日志框架有 jdk 自带的 logging,log4j1、log4j2、logback ,这些框架都自己定制了日志 API ,并且有相应的实现;目前用于实现日志统一的框架 Apache commons-logging、slf4j ,遵循「面向接口编程」的原则,这两大框架可以让用户在程序运行期间去选择具体的日志实现系统(log4j1\log4j2\logback等)来记录日志,是统