手册

目录

Java.io 包教程

Java 线程

收藏617

阅读808

更新时间2025-07-22

前言:

在本教程中,您将学习如何使用Java线程,Java线程线程允许程序通过同时执行多项操作来更有效地运行。线程可以用来在后台执行复杂的任务而不中断主程序。创建线程创建线程有两种方法。

Java 线程

线程允许程序通过同时执行多项操作来更有效地运行。

线程可以用来在后台执行复杂的任务而不中断主程序。


创建线程

创建线程有两种方法。

它可以通过扩展 Thread 类并覆盖其 run() 方法来创建:

扩展语法

public class MyClass extends Thread {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

另一种创建线程的方法是实现 Runnable 接口:

实现语法

public class MyClass implements Runnable {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

运行线程

如果该类扩展了 Thread 类,则可以通过创建该类的实例并调用其 start() 方法来运行线程:

Extend 实例

public class MyClass extends Thread {
  public static void main(String[] args) {
    MyClass thread = new MyClass();
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

如果类实现了 Runnable 接口,则可以通过将类的实例传递给 Thread 对象的构造函数,然后调用线程的 start() 方法来运行线程:

Implement 实例

public class MyClass implements Runnable {
  public static void main(String[] args) {
    MyClass obj = new MyClass();
    Thread thread = new Thread(obj);
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

"extending" 和 "implementing" 线程之间的区别

主要区别在于,当一个类扩展 Thread 类时,您不能扩展任何其他类,但通过实现 Runnable 接口,也可以从另一个类扩展,例如: class MyClass extends OtherClass implements Runnable.


并发问题

因为线程与程序的其他部分同时运行,所以无法知道代码将以何种顺序运行。当线程和主程序读取和写入相同的变量时,其值是不可预测的。由此产生的问题称为并发问题。

实例

变量数量的值不可预测的代码示例:

public class MyClass extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    MyClass thread = new MyClass();
    thread.start();
    System.out.println(amount);
    amount++;
    System.out.println(amount);
  }

  public void run() {
    amount++;
  }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

为了避免并发问题,最好在线程之间共享尽可能少的属性。如果需要共享属性,一种可能的解决方案是在使用线程可以更改的任何属性之前,使用线程的 isAlive() 方法检查线程是否已完成运行。

实例

使用 isAlive() 来防止并发问题:

public class MyClass extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    MyClass thread = new MyClass();
    thread.start();
    // 等待线程完成
    while(thread.isAlive()) {
    System.out.println("Waiting...");
  }
  // 更新 amount 并打印其值
  System.out.println("Main: " + amount);
  amount++;
  System.out.println("Main: " + amount);
  }
  public void run() {
    amount++;
  }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号