当前位置: 首页 > news >正文

JAVA 线程

目录

一、线程的定义

二、线程的实现

三、线程状态


程序并发执行多个任务

二、线程的实现

1、继承Thread类创建线程:通过继承Java的Thread类并重写其run()方法,可以创建一个新的线程。然后,通过调用线程的start()方法来启动线程,这将导致JVM调用线程的run()方法。注意,不应直接调用run()方法,因为这样只会作为普通方法调用,而不会启动新的线程。
2、实现Runnable接口创建线程:另一种创建线程的方式是实现Java的Runnable接口,并同样重写其run()方法。然后,可以创建一个Thread对象,并将Runnable对象作为参数传递给Thread对象的构造函数。最后,通过调用Thread对象的start()方法来启动线程。这种方式的一个优点是,一个类可以继承其他类并实现Runnable接口,从而实现多重继承的效果。

public class MyThread extends Thread {  @Override  public void run() {  // 线程执行的代码  for (int i = 0; i < 5; i++) {  System.out.println("MyThread running: " + i);  }  }  public static void main(String[] args) {  // 创建并启动线程  MyThread thread = new MyThread();  thread.start();  // 主线程继续执行  for (int i = 0; i < 5; i++) {  System.out.println("Main thread running: " + i);  }  }  
}
public class MyRunnable implements Runnable {  @Override  public void run() {  // 线程执行的代码  for (int i = 0; i < 5; i++) {  System.out.println("MyRunnable running: " + i);  }  }  public static void main(String[] args) {  // 创建Runnable对象  MyRunnable runnable = new MyRunnable();  // 创建Thread对象,并将Runnable对象作为参数  Thread thread = new Thread(runnable);  // 启动线程  thread.start();  // 主线程继续执行  for (int i = 0; i < 5; i++) {  System.out.println("Main thread running: " + i);  }  }  
}

三、线程状态

在Java中,线程可以处于多种状态,这些状态反映了线程在其生命周期中的不同阶段。Java线程状态的主要类型包括:新建(NEW)、就绪(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)。下面是对这些状态的详细解释:

  1. 新建(NEW):当线程对象被创建但尚未启动(即尚未调用start()方法)时,线程处于新建状态。此时,线程对象已经分配了必要的内存和其他资源,但它还没有开始执行。

  2. 就绪(RUNNABLE):一旦线程启动(即调用了start()方法),它就进入了就绪状态。就绪状态的线程已经具备运行的所有条件,正在等待CPU的调度。当CPU空闲时,线程调度器会从就绪状态的线程中选择一个来执行。

  3. 阻塞(BLOCKED):当一个线程试图获取一个内部的对象锁(而不是java.util.concurrent库中的锁),而该锁被其他线程持有时,该线程会进入阻塞状态。当持有锁的线程释放锁时,阻塞状态的线程会进入就绪状态,等待CPU的调度。

  4. 等待(WAITING):当线程执行了对象的wait()方法时,它会进入等待状态。等待状态的线程不会占用CPU资源,它等待其他线程执行特定对象的notify()或notifyAll()方法来唤醒它。唤醒后,线程会进入就绪状态。

  5. 超时等待(TIMED_WAITING):这是线程等待的另一个状态,但带有超时参数。当线程执行了Thread.sleep(long millis)、Object.wait(long timeout)或Thread.join(long millis)等带有超时参数的方法时,它会进入超时等待状态。如果在指定的超时时间内没有被唤醒或超时结束,线程会结束等待,并返回到就绪状态。

  6. 终止(TERMINATED):当线程的run()方法执行完毕,或者因异常退出,线程就进入了终止状态。终止状态的线程不会再执行任何操作,它的生命周期已经结束。

http://www.lryc.cn/news/321704.html

相关文章:

  • Rust 基于 await、async 的异步编程和纤程、协程的实现
  • 【进阶五】Python实现SDVRP(需求拆分)常见求解算法——差分进化算法(DE)
  • 什么是神经网络?
  • 基于Python的图形用户界面设计及应用
  • python网络爬虫实战教学——urllib的使用(1)
  • 简述归并排序
  • HTML实现卷轴动画完整源码附注释
  • sh: 1: dtc: not found
  • laravel 表单验证的 exists、unique 去除软删除字段的校验
  • 【PHP + 代码审计】函数详解2.0
  • 宠物智能喂食机方案设计
  • 测试直播打赏需要考虑哪些测试要点?
  • Python练习(续)
  • 发布镜像到阿里云仓库
  • web蓝桥杯真题:灯的颜色变化
  • 通过docker容器安装zabbix6.4.12图文详解(监控服务器docker容器)
  • 算法打卡day21|回溯法篇01|理论知识,Leetcode 77.组合
  • C++ 输入输出
  • FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持
  • 【gpt实践】50个提升工作效率的GPT指令
  • 基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。
  • 论文阅读——EarthPT
  • 软件测评中心:进行科技成果鉴定测试的注意事项和好处简析
  • Android 系统开发工具大全
  • C版本的-Unet-rknn推理
  • Transformer的前世今生 day04(ELMO、Attention注意力机制)
  • 稀碎从零算法笔记Day19-LeetCode:相交链表
  • AI系统性学习03—ChatGPT开发教程
  • 每日一练 | 华为认证真题练习Day201
  • nginx日志统计qps