当前位置:首页 > Java

java 线程如何执行

2026-03-25 19:55:34Java

线程创建与启动

在Java中,线程可以通过继承Thread类或实现Runnable接口来创建。继承Thread类需要重写run()方法,而实现Runnable接口需要实现run()方法。创建线程实例后,调用start()方法启动线程。

// 继承Thread类
class MyThread extends Thread {
    public void run() {
        System.out.println("Thread running");
    }
}

// 实现Runnable接口
class MyRunnable implements Runnable {
    public void run() {
        System.out.println("Runnable running");
    }
}

// 启动线程
MyThread thread1 = new MyThread();
thread1.start();

Runnable runnable = new MyRunnable();
Thread thread2 = new Thread(runnable);
thread2.start();

线程状态管理

Java线程有六种状态:NEWRUNNABLEBLOCKEDWAITINGTIMED_WAITINGTERMINATED。通过Thread.getState()可以获取线程当前状态。线程状态转换由JVM调度控制,开发者可通过wait()notify()join()等方法干预。

java 线程如何执行

Thread thread = new Thread(() -> {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});
System.out.println(thread.getState()); // NEW
thread.start();
System.out.println(thread.getState()); // RUNNABLE

线程同步与锁

多线程共享资源时需使用同步机制避免竞态条件。Java提供synchronized关键字和java.util.concurrent.locks包实现同步。synchronized可修饰方法或代码块,确保同一时间只有一个线程执行临界区代码。

class Counter {
    private int count = 0;

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

// 使用ReentrantLock
import java.util.concurrent.locks.ReentrantLock;

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

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

线程池的使用

Java通过ExecutorService框架提供线程池管理。常用线程池包括FixedThreadPoolCachedThreadPoolScheduledThreadPool。线程池可减少线程创建销毁开销,提高资源利用率。

java 线程如何执行

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

ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
    executor.execute(() -> {
        System.out.println("Task executed by " + Thread.currentThread().getName());
    });
}
executor.shutdown();

线程间通信

线程可通过共享对象或使用wait()/notify()机制通信。BlockingQueue等并发容器是线程安全的高效通信工具。生产者-消费者模式是典型应用场景。

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10);

// 生产者
new Thread(() -> {
    try {
        queue.put(1);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

// 消费者
new Thread(() -> {
    try {
        Integer item = queue.take();
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

线程中断处理

线程可通过interrupt()方法请求中断,被中断线程需检查isInterrupted()状态并响应。正确处理中断是编写健壮多线程程序的关键。

Thread worker = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
});
worker.start();
worker.interrupt();

标签: 线程java
分享给朋友:

相关文章

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

java如何创建数组

java如何创建数组

创建数组的基本方法 在Java中,数组是固定大小的同类型元素集合。创建数组需要声明数组类型并初始化。 声明数组 语法格式为 数据类型[] 数组名 或 数据类型 数组名[]: int[] arr1;…

java如何连接mysql

java如何连接mysql

连接 MySQL 数据库的基本步骤 添加 MySQL 驱动依赖 在项目中引入 MySQL 的 JDBC 驱动。如果使用 Maven,在 pom.xml 中添加以下依赖: <dependency…

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…