亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 多线程详解:概念、生命周期与实战代码示例

Java 应用常需同时执行多任务。本教程带你了解单线程与多线程执行、线程生命周期、同步技术,及演示各概念的实战代码示例。

什么是单线程?

Java 中单线程是最小执行单元。Java 运行时启动应用时创建 用户线程,按需可添加额外用户或 守护线程。守护线程后台运行,不阻止 JVM 退出。

单线程示例:

package demotest; public class GuruThread { public static void main(String[] args) { System.out.println("Single Thread"); } }

单线程执行优势:

什么是 Java 多线程?

多线程允许两个或更多线程并发运行,最大化 CPU 利用率。线程共享内存空间,上下文切换快、内存占用低。

创建两个并发线程示例:

package demotest; public class GuruThread1 implements Runnable { public static void main(String[] args) { Thread guruThread1 = new Thread("Guru1"); Thread guruThread2 = new Thread("Guru2"); guruThread1.start(); guruThread2.start(); System.out.println("Thread names are following:"); System.out.println(guruThread1.getName()); System.out.println(guruThread2.getName()); } @Override public void run() { // 线程逻辑 } }

多线程优势:

Java 线程生命周期

线程生命周期包含五个不同状态:

  1. New —— 线程实例化但未启动。
  2. Runnable —— 线程已启动,就绪待执行。
  3. Running —— 线程主动执行中。
  4. Waiting —— 线程挂起等待特定事件。
  5. Dead —— 线程执行完毕。

Java 多线程详解:概念、生命周期与实战代码示例
Java 线程生命周期

关键线程方法

方法描述
start()开始线程执行;JVM 调用 run()。
sleep(long milliseconds)暂停当前线程指定时长。
getName()返回线程名称。
setPriority(int newPriority)调整线程优先级(1–10)。
yield()建议调度器暂停当前线程。

实战线程示例

下面简例演示线程创建、优先级调整、睡眠。

package demotest; public class ThreadExample1 implements Runnable { @Override public void run() { // 线程工作 } public static void main(String[] args) { Thread guruThread1 = new Thread(); guruThread1.start(); try { Thread.sleep(1000); // 暂停 1 秒 } catch (InterruptedException e) { e.printStackTrace(); } guruThread1.setPriority(1); System.out.println(guruThread1.getPriority()); System.out.println("Thread Running"); } }

输出示例:

Java 多线程详解:概念、生命周期与实战代码示例

线程同步

多线程访问共享资源时,同步确保数据一致性。Java 用 synchronized 关键字包裹临界区,保证独占访问。

synchronized(object) { // 同步块 }

进阶多线程示例

下面更完整示例创建两线程,各打印名称与计数器,间隔 1 秒。

package demotest; public class GuruThread2 { public static void main(String[] args) { GuruThread3 threadGuru1 = new GuruThread3("guru1"); threadGuru1.start(); GuruThread3 threadGuru2 = new GuruThread3("guru2"); threadGuru2.start(); } } class GuruThread3 implements Runnable { private Thread guruthread; private String guruname; GuruThread3(String name) { this.guruname = name; } @Override public void run() { System.out.println("Thread running " + guruname); for (int i = 0; i < 4; i++) { System.out.println(i); System.out.println(guruname); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Thread has been interrupted"); } } } public void start() { System.out.println("Thread started"); if (guruthread == null) { guruthread = new Thread(this, guruname); guruthread.start(); } } }

典型输出(见附图):

Java 多线程详解:概念、生命周期与实战代码示例

核心收获

java

  1. C++ 函数详解:从声明到调用的实战指南
  2. C# 集合实战教程:ArrayList、Stack、Queue、Hashtable 等核心类型全解析
  3. 精通 C++ 多线程编程:高效并发开发实战
  4. Java Hello World:你的第一个程序
  5. 精通 Java String.indexOf():定位子字符串与实战示例
  6. Java String.charAt() 详解:语法、返回类型、异常与实战示例
  7. 精通 Java String compareTo():语法、用例与实战示例
  8. Java 构造器重载详解:规则、链式调用与实战代码
  9. Java 判断素数(质数)的完整指南与代码实现
  10. Java 插入排序算法详解:核心原理、完整代码与步骤演示
  11. Java 选择排序详解:核心原理、完整代码与步骤演示
  12. Java 9 try-with-resources 改进:Effectively-final 变量直接使用