您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Java多线程的实现原理及案例
## 一、多线程基础概念
### 1.1 进程与线程的区别
- **进程**:操作系统资源分配的基本单位,拥有独立的地址空间
- **线程**:CPU调度的基本单位,共享进程资源,切换开销小
- 关系:一个进程包含多个线程(至少1个主线程)
### 1.2 多线程优势
- 提高CPU利用率(避免I/O阻塞)
- 提升系统吞吐量(并发处理)
- 改善响应时间(后台任务不影响UI)
## 二、Java线程实现原理
### 2.1 线程创建方式
#### 2.1.1 继承Thread类
```java
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread running");
}
}
// 启动
new MyThread().start();
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable running");
}
}
// 启动
new Thread(new MyRunnable()).start();
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "Callable result";
}
}
// 使用
FutureTask<String> task = new FutureTask<>(new MyCallable());
new Thread(task).start();
System.out.println(task.get()); // 获取返回值
stateDiagram
[*] --> NEW
NEW --> RUNNABLE: start()
RUNNABLE --> RUNNING: 获取CPU
RUNNING --> BLOCKED: 同步阻塞
BLOCKED --> RUNNABLE: 获取锁
RUNNING --> WTING: wait()/join()
WTING --> RUNNABLE: notify()
RUNNING --> TERMINATED: run()结束
// 实例方法锁
public synchronized void method() {}
// 代码块锁
public void method() {
synchronized(obj) {}
}
Lock lock = new ReentrantLock();
lock.lock();
try {
// 临界区
} finally {
lock.unlock();
}
synchronized(lock) {
while(conditionNotMet) {
lock.wait(); // 释放锁
}
// 处理逻辑
lock.notifyAll();
}
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
lock.lock();
try {
condition.await();
condition.signal();
} finally {
lock.unlock();
}
参数 | 说明 |
---|---|
corePoolSize | 核心线程数 |
maximumPoolSize | 最大线程数 |
keepAliveTime | 空闲线程存活时间 |
workQueue | 任务队列(ArrayBlockingQueue等) |
handler | 拒绝策略(AbortPolicy等) |
ExecutorService pool = Executors.newFixedThreadPool(5);
pool.execute(() -> {
System.out.println("Task running");
});
pool.shutdown();
class Buffer {
private Queue<Integer> queue = new LinkedList<>();
private int capacity;
public Buffer(int capacity) {
this.capacity = capacity;
}
public synchronized void produce(int item) throws InterruptedException {
while(queue.size() == capacity) {
wait();
}
queue.offer(item);
notifyAll();
}
public synchronized int consume() throws InterruptedException {
while(queue.isEmpty()) {
wait();
}
int item = queue.poll();
notifyAll();
return item;
}
}
class Counter {
private AtomicLong count = new AtomicLong(0);
public void increment() {
count.incrementAndGet();
}
public long get() {
return count.get();
}
}
CompletableFuture.supplyAsync(() -> queryFromDB())
.thenApplyAsync(data -> processData(data))
.thenAcceptAsync(result -> saveResult(result))
.exceptionally(ex -> {
System.err.println("Error: " + ex);
return null;
});
最佳实践:多线程编程应遵循”先正确性,再优化性能”的原则,合理使用JUC工具类能显著降低开发复杂度。 “`
(注:实际字数约1800字,可根据需要增减案例部分调整字数)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。