Java 线程相关 总结

news/2025/6/17 5:04:11

1. 简介

本文总结一下Java中线程相关的知识。

2.线程的状态

‌Java线程有六种状态‌:

  • ‌NEW状态‌:线程对象已被创建,但尚未启动。 ‌
  • RUNNABLE状态‌:1.线程已经准备好,随时可以被CPU执行。2.线程正在执行。
  • TERMINATED状态‌:线程已经执行完毕,被终止。 ‌
  • WAITING状态‌:线程正在等待某个条件成立,以便继续执行。
  • TIMED_WAITING状态‌:线程在等待某个条件成立,但有一个超时时间。
  • BLOCKED状态‌:线程由于锁竞争而阻塞,无法执行。

3. 常用方法

//创建线程
MyThread1 t1 = new MyThread1();//自定义线程类创建线程,自定义线程类需要继承Thread,并重新覆盖run方法Thread t2 = new Thread(()->{//匿名函数创建线程System.out.println("线程执行");
});
Thread t3 = new Thread(new Runnable() {//匿名runnable创建线程@Overridepublic void run() {System.out.println("线程8执行");}
});t1.start();//线程启动
Thread.sleep(3000);//休眠线程

4. Join方法

join方法用于将当前线程挂起,等待对应线程执行完成,用于安排线程执行先后顺序。

public class Main {//FileNotFoundException, IOExceptionpublic static void main(String[] args) throws Exception {//线程串行执行MyThread1 t1 = new MyThread1();MyThread1 t2 = new MyThread1();t1.start();t2.start();t2.join();//t2先执行t1.join();//t1后执行System.out.println(Thread.currentThread().getName());//主函数最后执行}
}//声明自定义线程类
class MyThread1 extends Thread{@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}class MyThread2 extends Thread{@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}

5. synchronized同步机制

5.1 synchronized代码块

synchronized代码块相当于创建一个锁的临界区,用于线程间的同步操作:

public class Main {public static void main(String[] args) throws Exception {Num num = new Num();User user = new User(num);user.start();Bank bank = new Bank(num);bank.start();}
}class Num {}class Bank extends Thread{private Num num;public Bank(Num num){this.num = num;}public void run(){synchronized (num){//synchronized包裹的区域是临界区try{Thread.sleep(2000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("开始叫号");num.notifyAll();//通知}}
}class User extends Thread{private Num num;public User(Num num){this.num = num;}public  void run(){synchronized ( num ){//synchronized包裹的区域是临界区System.out.println("银行还没开门,需要等一会");try {num.wait();//休眠,等待通知,wait方法只能在synchronized块中使用} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("该我了");}}
}

5.2 synchronized修饰方法

synchronized用在方法的前面代表,该方法同一时刻只能被一个线程访问:

public synchronized void test(){}

6. 线程池

线程池的常用类型总结如下:

ExecutorService executorService = Executors.newFixedThreadPool(3);//创建固定个数线程,如果执行线程数超出个数,则阻塞。
ExecutorService executorService = Executors.newCachedThreadPool();//根据需求动态创建线程,如果线程池数量不够,则动态创建新线程。
ExecutorService executorService = Executors.newSingleThreadExecutor();//只有一个线程,用于有先后顺序要求的场景
ExecutorService executorService = Executors.newScheduledThreadPool(3);//定时调度线程,延迟执行,重复执行等。for(int i = 0; i < 30; i++) {executorService.submit(new Runnable() {//执行线程@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}});
}
文章来源:https://blog.csdn.net/a827143452/article/details/142331026
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-5426486.html

相关文章

Oracle从入门到放弃

Oracle从入门到放弃 左连接和右连接Where子查询单行子查询多行子查询 from子句的子查询select子句的子查询oracle分页序列序列的应用 索引PL/SQL变量声明与赋值select into 赋值变量属性类型 异常循环游标存储函数存储过程不带传出参数的存储过程带传出参数的存储过程 左连接和…

利用pandas为海量数据添加UUID并实现精准筛选

文章目录 摘要引言环境准备构建示例数据添加UUID列精准筛选数据成果展示 摘要 在数据处理中&#xff0c;为每条数据记录赋予独特身份标识至关重要。本文通过引入UUID 作为全局唯一标识符&#xff0c;结合强大的pandas库&#xff0c;详细介绍了如何为数据表轻松添加UUID&#x…

Deep Learning-Based Object Pose Estimation:A Comprehensive Survey

论文&#xff1a;https://arxiv.org/pdf/2405.07801v3 项目&#xff1a;https://github.com/CNJianLiu/Awesome-Object-Pose-Estimation 年份&#xff1a;2024 方向&#xff1a;姿态估计 1. 目标姿态估计定义 估计图像中目标相对于相机的姿态&#xff0c; 目标姿态估计是增…

TDengine 与 SCADA 强强联合:提升工业数据管理的效率与精准

随着时序数据库&#xff08;Time Series Database&#xff09;的日益普及&#xff0c;越来越多的工业自动化控制&#xff08;工控&#xff09;人员开始认识到其强大能力。然而&#xff0c;时序数据库在传统实时数据库应用领域&#xff0c;特别是在过程监控层的推广仍面临挑战&a…

Java标识符、关键字和保留字

Java中的标识符、关键字和保留字 标识符概念标识符命名规则&#xff08;必须遵守&#xff09;标识符命名规范&#xff08;更加专业&#xff09;关键字保留字 标识符概念 1.Java对各种变量、方法和类等命名时使用的字符序列称为标识符。 2.凡是自己可以起名字的地方都叫标识符 …

“华为杯”第二十一届中国研究生数学建模竞赛开赛须知

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 1.加密赛题开始下载时间&#xff1a;2024年9月20日8:00&am…

不断挑战才有不断机遇!Eagle Trader等你来加入!

2024“Eagle Trader杯”全国职业交易联赛S1赛季已火热进行一个多月&#xff0c;吸引了超过355名交易员的积极参与&#xff01;目前&#xff0c;每天都有新的交易员踊跃报名参加&#xff01; 经过严格地交易考核&#xff0c;13名选手成功通过初试&#xff0c;正进入下一阶段的挑…

波导阵列天线学习笔记 馈电网络1 使用X型全公共波导馈网的毫米波大规模天线阵列的带宽提升

摘要&#xff1a; 全公共波导馈网的一次反射等效模型被研究用于提出一种毫米波大规模天线阵列带宽提升的新方法。理论分析显示由馈电网络拓扑造成的指定频率的多级小反射的同相叠加现象是影响大规模阵列的可实现带宽的重要因素&#xff0c;除了包含阵列的独立功分器和反射器的带…

【Vmware16安装教程】

&#x1f4d6;Vmware16安装教程 ✅1.下载✅2.安装 ✅1.下载 官网地址&#xff1a;https://www.vmware.com/ 百度云盘&#xff1a;Vmware16下载 123云盘&#xff1a;Vmware16下载 ✅2.安装 1.双击安装包VMware-workstation-full-16.1.0-LinuxProbe.Com.exe&#xff0c;点击…

蓝桥杯嵌入式客观题合集

十四届模拟赛二客观题 解析&#xff1a;STM32微控制器的I/O端口寄存器必须按32位字被访问 解析&#xff1a;微分电路能将三角波转换为方波&#xff1b;积分电路能将方波转换为三角波 解析&#xff1a;放大电路的本质是能量的控制与转换 解析&#xff1a;具有n个节点&#xff0c…