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

Java中的线程

目录

简单介绍

基本概念

创建线程的两种主要方式

继承Thread类

实现Runnable接口

线程声明周期

线程控制方法

线程同步

synchronized关键字

Lock接口

线程池(Executor框架)

现代Java并发工具

最佳实战


简单介绍

线程是Java并发编程的核心概念,允许程序同时执行多个任务。


基本概念

  1. 线程(Thewad):程序执行的最小单元,是进程中的一个独立执行路径
  2. 主线程:每个Java程序启动时都会创建一个主线程,执行main()方法
  3. 多线程:一个程序中同时运行多个线程的能力

创建线程的两种主要方式

继承Thread类

class MyThread extends Thread {public void run() {// 线程执行的代码}
}// 使用
MyThread thread = new MyThread();
thread.start();

实现Runnable接口

class MyRunnable implements Runnable {public void run() {// 线程执行的代码}
}// 使用
Thread thread = new Thread(new MyRunnable());
thread.start();

线程声明周期

  1. 新建(New):线程对象被创建但尚未启动
  2. 就绪(Runnable):调用start()后,等待CPU调度
  3. 运行(Running):获得CPU资源,执行run()方法
  4. 阻塞(Blocked):线程暂停执行,等待某些条件满足
  5. 终止(Terminated):run()方法执行完毕或异常退出

图示:

线程控制方法

  • start():启动线程
  • run():定义线程执行体
  • sleep(long milliis):使线程休眠指定毫秒数
  • join():等待该线程终止
  • interrupt():终端线程
  • isAlive():测试线程是否处于活动状态

线程同步

当多个线程访问共享资源时,需要使用同步机制:

synchronized关键字

// 同步方法
public synchronized void method() {// 临界区代码
}// 同步块
synchronized(obj) {// 临界区代码
}

Lock接口

Lock lock = new ReentrantLock();
lock.lock();
try {// 临界区代码
} finally {lock.unlock();
}

线程池(Executor框架)

Java提供了线程池来高效管理线程:

ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(new RunnableTask());
executor.shutdown();

现代Java并发工具

  • Future和Callable:可返回结果的线程
  • CountDownLatch:同步辅助类
  • CyclicBarrier:可重复使用的同步屏障
  • Semaphore:计数信号量
  • CompletableFuture:异步编程的强大工具

最佳实战

  1. 优先实现Runnable接口而非继承Thread类
  2. 使用线程池而非直接创建线程
  3. 尽量减少同步范围,提高性能
  4. 使用更高层次的并发工具而非直接使用wait/notify
  5. 注意处理线程中断

相关文章:

  • 编程题 02-线性结构3 Reversing Linked List【PAT】
  • Arduino快速入门
  • 组合数学——容斥原理
  • K8S Ingress、IngressController 快速开始
  • [数据结构高阶]并查集初识、手撕、可以解决哪类问题?
  • AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)
  • Matlab 空调温度时延模型的模糊pid控制
  • M8040A/M8199助力数据中心收发信机测试
  • 25、Tailwind:魔法速记术——React 19 样式新思路
  • 数据治理域——数据治理体系建设
  • Hive HA配置高可用
  • 多样本整合Banksy空间聚类分析(Visium HD, Xenium, CosMx)
  • AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
  • 深入浅出:Java 中的动态类加载与编译技术
  • 15.three官方示例+编辑器+AI快速学习webgl_buffergeometry_instancing
  • IOT藍牙探測 C2 架構:社會工程/節點分離防追尋
  • Windows下安装Docker Desktop到C盘以外的盘
  • DNS工作原理与报文解析
  • Python Day23 学习
  • [笔记]几起风电结构失效案例与简单分析
  • 济南市委副秘书长吕英伟已任历下区领导
  • OpenAI与微软正谈判修改合作条款,以推进未来IPO
  • 种罂粟喂鸡防病?四川广元一村民非法种植毒品原植物被罚​
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 道指跌逾100点,特斯拉涨近5%
  • 央行设立服务消费与养老再贷款,额度5000亿元