跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

Java多线程编程

线程基础

stateDiagram-v2
    [*] --> 新建: 
    新建 --> 就绪: start()
    就绪 --> 运行: 获取CPU
    运行 --> 就绪: yield()/时间片用完
    运行 --> 阻塞: 同步阻塞
    阻塞 --> 就绪: 获取锁
    运行 --> 等待: wait()/join()
    等待 --> 就绪: notify()/notifyAll()
    运行 --> 超时等待: sleep()/wait(timeout)
    超时等待 --> 就绪: 超时/唤醒
    运行 --> 终止: run()结束

线程创建方式

// 1. 继承Thread类
class MyThread extends Thread {
    public void run() {
        System.out.println("线程运行");
    }
}

// 2. 实现Runnable接口
class MyRunnable implements Runnable {
    public void run() {
        System.out.println("线程运行");
    }
}

// 3. 使用FutureTask
FutureTask<Integer> task = new FutureTask<>(() -> {
    System.out.println("线程运行");
    return 100;
});

线程同步

// 1. synchronized
public synchronized void method() {
    // 同步代码
}

// 2. ReentrantLock
Lock lock = new ReentrantLock();
lock.lock();
try {
    // 同步代码
} finally {
    lock.unlock();
}

// 3. 原子类
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();

线程池使用

ExecutorService pool = Executors.newFixedThreadPool(4);

// 提交任务
Future<?> future = pool.submit(() -> {
    // 任务代码
});

// 关闭线程池
pool.shutdown();

最佳实践

  1. 优先使用线程池
  2. 合理设置线程池参数
  3. 避免锁嵌套
  4. 使用并发集合类
  5. 注意线程安全设计