当前位置:首页 > Java

java线程如何使用

2026-03-03 08:25:12Java

线程的基本概念

在Java中,线程是程序执行的最小单元,多线程允许程序同时执行多个任务。Java通过Thread类和Runnable接口提供线程支持。

创建线程的两种方式

继承Thread类

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("线程运行中");
    }
}

// 使用方式
MyThread thread = new MyThread();
thread.start();

实现Runnable接口

java线程如何使用

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("线程运行中");
    }
}

// 使用方式
Thread thread = new Thread(new MyRunnable());
thread.start();

线程的生命周期

  • 新建(New):线程对象创建后但未调用start()
  • 就绪(Runnable):调用start()后,等待CPU调度。
  • 运行(Running):线程获取CPU资源执行run()方法。
  • 阻塞(Blocked):线程因等待资源或I/O操作暂停。
  • 终止(Terminated)run()方法执行完毕或异常退出。

线程常用方法

  • start():启动线程。
  • run():定义线程执行的任务。
  • sleep(long millis):暂停线程指定毫秒。
  • join():等待线程终止。
  • interrupt():中断线程。
  • isAlive():检查线程是否存活。

线程同步与锁

多线程共享资源时需同步以避免竞态条件。

synchronized关键字

java线程如何使用

class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }
}

ReentrantLock

import java.util.concurrent.locks.ReentrantLock;

class Counter {
    private final ReentrantLock lock = new ReentrantLock();
    private int count = 0;

    public void increment() {
        lock.lock();
        try {
            count++;
        } finally {
            lock.unlock();
        }
    }
}

线程池的使用

Java提供ExecutorService管理线程池,避免频繁创建销毁线程。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> {
    System.out.println("任务执行");
});
executor.shutdown();

线程间通信

通过wait()notify()notifyAll()实现。

class SharedResource {
    private boolean flag = false;

    public synchronized void waitForFlag() throws InterruptedException {
        while (!flag) {
            wait();
        }
    }

    public synchronized void setFlag() {
        flag = true;
        notifyAll();
    }
}

注意事项

  • 避免死锁:确保锁的获取顺序一致。
  • 减少锁粒度:仅同步必要代码块。
  • 使用线程安全类:如ConcurrentHashMap
  • 避免长时间占用锁:防止其他线程长时间等待。

分享给朋友:

相关文章

react如何使用函数

react如何使用函数

使用函数组件的基本语法 在React中,函数组件是通过JavaScript函数定义的组件。函数接收props作为参数,并返回React元素。 function Welcome(props) {…

react thunk 如何使用

react thunk 如何使用

使用 React Thunk 的基本步骤 安装 Redux 和 Redux Thunk 作为依赖项: npm install redux redux-thunk 在 Redux store 配置中应…

react激光如何使用

react激光如何使用

安装React激光库 在项目中安装React激光库,通常通过npm或yarn完成。确保项目已初始化并具备React环境。 npm install react-laser-beam # 或 yar…

如何使用react native

如何使用react native

安装开发环境 确保系统已安装Node.js(建议LTS版本)。通过npm或yarn全局安装React Native命令行工具: npm install -g react-native-cli # 或…

react如何使用agora

react如何使用agora

使用 React 集成 Agora 视频通话 SDK 安装 Agora SDK 在 React 项目中安装 Agora RTC SDK: npm install agora-rtc-sdk 初始化…

react ref 如何使用

react ref 如何使用

React Refs 的基本概念 Refs 提供了一种方式,允许直接访问 DOM 节点或在 React 组件中创建的实例。主要用于需要直接操作 DOM 或访问组件内部状态的场景,比如聚焦输入框、触发动…