
以下是一个结构清晰的Java多线程编程知识框架涵盖基础原理到实战应用一、多线程基础原理线程与进程进程操作系统资源分配的基本单位独立内存空间线程CPU调度的基本单位共享进程内存轻量级执行单元关系一个进程包含多个线程线程间共享堆内存、方法区独享栈内存线程创建方式// 1. 继承Thread类 class MyThread extends Thread { Override public void run() { System.out.println(Thread running); } } // 2. 实现Runnable接口 class MyRunnable implements Runnable { Override public void run() { System.out.println(Runnable running); } } // 3. 实现Callable接口带返回值 class MyCallable implements CallableString { Override public String call() throws Exception { return Callable result; } }线程生命周期六种状态NEW新建、RUNNABLE可运行、BLOCKED阻塞、WAITING等待、TIMED_WAITING限时等待、TERMINATED终止状态转换图$$ \text{NEW} \xrightarrow{\text{start()}} \text{RUNNABLE} \xrightarrow{\text{sync/IO}} \text{BLOCKED} \xrightarrow{\text{wait()}} \text{WAITING} $$二、线程同步与通信同步机制synchronized修饰实例方法锁定当前对象实例修饰静态方法锁定类的Class对象同步代码块指定锁对象如synchronized(lock) {...}Lock APIReentrantLock lock new ReentrantLock(); lock.lock(); try { // 临界区代码 } finally { lock.unlock(); }线程通信wait()/notify()synchronized (obj) { while (condition) { obj.wait(); // 释放锁并等待 } obj.notify(); // 唤醒等待线程 }Condition配合Lock使用Condition condition lock.newCondition(); condition.await(); // 类似wait() condition.signal(); // 类似notify()三、并发工具类JUC包原子操作类AtomicInteger原子整型操作AtomicInteger count new AtomicInteger(0); count.incrementAndGet(); // 线程安全自增并发容器ConcurrentHashMap分段锁实现高并发读写CopyOnWriteArrayList写时复制适用于读多写少场景线程池ThreadPoolExecutorExecutorService pool new ThreadPoolExecutor( 4, // 核心线程数 8, // 最大线程数 60, // 空闲线程存活时间 TimeUnit.SECONDS, new LinkedBlockingQueue(100) // 任务队列 ); pool.submit(() - System.out.println(Task executed));CountDownLatch CyclicBarrierCountDownLatch等待多个任务完成CountDownLatch latch new CountDownLatch(3); latch.countDown(); // 计数器减1 latch.await(); // 阻塞直到计数器归零CyclicBarrier多个线程到达屏障点后继续执行CyclicBarrier barrier new CyclicBarrier(3, () - System.out.println(All threads arrived)); barrier.await(); // 线程等待四、实战应用场景高并发计数器private AtomicLong counter new AtomicLong(0); public void increment() { counter.incrementAndGet(); }生产者-消费者模型BlockingQueueTask queue new LinkedBlockingQueue(10); // 生产者 queue.put(task); // 阻塞式添加 // 消费者 Task task queue.take(); // 阻塞式获取异步任务处理CompletableFutureCompletableFuture.supplyAsync(() - fetchData()) .thenApply(data - process(data)) .thenAccept(result - save(result));五、常见问题与优化死锁预防避免嵌套锁使用定时锁tryLock(timeout)锁排序固定加锁顺序性能调优根据任务类型选择线程池参数CPU密集型 vs I/O密集型减少锁粒度如ConcurrentHashMap的分段锁线程安全设计原则优先使用不可变对象如String、BigInteger用线程局部变量避免共享ThreadLocalThreadLocalSimpleDateFormat dateFormat ThreadLocal.withInitial(() - new SimpleDateFormat(yyyy-MM-dd));通过此框架可系统掌握Java多线程的核心技术并在实际项目中灵活应用。