当前位置:首页 > 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()等方法干预。

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。线程池可减少线程创建销毁开销,提高资源利用率。

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()状态并响应。正确处理中断是编写健壮多线程程序的关键。

java 线程如何执行

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如何输入

使用Scanner类进行输入 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读取数据。需要导入java.util.Scanner包。 基本语法: Scanner sca…

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名…

java如何调用接口

java如何调用接口

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

如何编译java

如何编译java

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

如何学习java语言

如何学习java语言

学习Java语言的系统方法 理解基础概念 Java是一种面向对象的编程语言,掌握基础概念如变量、数据类型、运算符、控制流语句(if-else、循环)是第一步。熟悉类和对象的概念,理解封装、继承和多态三…