Java并发与多线程:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的并发与多线程:从基础到进阶技术



现代应用程序需要最大性能。在Java中,并发和多线程是有效利用多核处理器的关键工具。本文将讲解如何正确处理线程、同步以及现代并发工具。



Java中的多线程是什么?

多线程是程序同时执行多个任务的能力。在Java中,每个线程(thread)都是一个轻量级进程,拥有自己的调用栈。主要优势:

  • 通过并行执行提升性能
  • 更响应的用户界面
  • 有效利用CPU资源


创建线程:两种方法

Java中有两种主要创建线程的方式:



1. 继承Thread类

public class MyThread extends Thread {    @Override    public void run() {        System.out.println("线程正在执行: " + Thread.currentThread().getName());    }

public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); // 启动线程 }}


2. 实现Runnable接口

public class Task implements Runnable {    @Override    public void run() {        System.out.println("任务在线程中执行: " + Thread.currentThread().getName());    }

public static void main(String[] args) { Thread thread = new Thread(new Task()); thread.start(); }}

推荐使用Runnable,因为它不会限制继承其他类的可能性。



线程同步:避免竞态条件

当多个线程访问共享数据时,会出现同步问题。来看一个经典示例——计数器:



public class Counter {    private int count = 0;

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

public synchronized int getCount() { return count; }}

关键字synchronized确保同一时间只有一个线程可以执行该方法。替代方案是使用java.util.concurrent.locks包中的Lock。



死锁:如何避免互相阻塞

当两个线程互相等待对方释放资源时,就会发生死锁。示例:

public class DeadlockExample {    private final Object lock1 = new Object();    private final Object lock2 = new Object();

public void method1() { synchronized (lock1) { synchronized (lock2) { // 临界区 } } }

public void method2() { synchronized (lock2) { synchronized (lock1) { // 临界区 } } }}

为避免死锁,始终以相同顺序获取锁,或使用带超时的tryLock()。



ExecutorService:管理线程池

手动创建线程效率低下。Java提供了ExecutorService来管理线程池:



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

public class ThreadPoolExample { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(4);

for (int i = 0; i < 10; i++) { executor.submit(() -> { System.out.println("正在执行于: " + Thread.currentThread().getName()); }); }

executor.shutdown(); // 所有任务完成后终止 }}

主要线

博客

书籍推荐