关注
多线程编程的实战技巧主要包括线程操纵资源类、避免虚假唤醒、使用锁和条件变量等工具。以下是一个具体的例子:
1. 定义一个资源类Source,包含一个锁lock、三个条件变量conditionA、conditionB、conditionC和一个状态变量state。
```java
class Source {
Lock lock = new ReentrantLock();
Condition conditionA = lock.newCondition();
Condition conditionB = lock.newCondition();
Condition conditionC = lock.newCondition();
int state = 1;
void printA() {
System.out.println("A");
}
void printB() {
System.out.println("B");
}
void printC() {
System.out.println("C");
}
}
```
2. 定义三个线程类A、B、C,每个线程都包含一个Source对象,并实现run方法。在run方法中,线程首先获取锁,然后判断状态是否等于自己的序号,如果不是,则等待。如果是,则执行打印操作,并将状态设置为下一个线程的序号,最后通知下一个线程。
```java
class A implements Runnable {
private Source source;
public A(Source source) {
this.source = source;
}
@Override
public void run() {
source.lock.lock();
try {
while (source.state != 1) {
source.conditionA.await();
}
source.printA();
source.state = 2;
source.conditionB.signal();
} catch (Exception e) {
e.printStackTrace();
} finally {
source.lock.unlock();
}
}
}
```
3. 在主函数中,创建Source对象和三个线程,并启动线程。
```java
class Test {
public static void main(String[] args) throws InterruptedException {
Source source = new Source();
for (int i = 0; i < 100; i++) {
new Thread(new A(source)).start();
new Thread(new B(source)).start();
new Thread(new C(
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 春招什么时候投? #
4038次浏览 61人参与
# 春节提前走,你用什么理由请假? #
4391次浏览 84人参与
# 春节前,你还在投简历吗? #
5935次浏览 69人参与
# 实习到现在,你最困惑的一个问题 #
1479次浏览 46人参与
# 牛客AI体验站 #
13071次浏览 252人参与
# 备战春招/暑实,现在应该做什么? #
1332次浏览 44人参与
# 牛友的春节生活 #
1144次浏览 37人参与
# 从夯到拉,锐评职场mentor #
1224次浏览 28人参与
# 聊聊Agent开发 #
12577次浏览 313人参与
# 距离春招还有一个月,你现在是什么开局? #
2602次浏览 51人参与
# 推荐一个值得做的AI项目 #
3465次浏览 107人参与
# 实习想申请秋招offer,能不能argue薪资 #
218462次浏览 1171人参与
# 暑期实习什么时候投? #
3151次浏览 71人参与
# 腾讯工作体验 #
566607次浏览 3698人参与
# 通信硬件2024笔试面试经验 #
269054次浏览 2053人参与
# 哪些瞬间让你真切感受到了工作的乐趣 #
24401次浏览 105人参与
# 实习必须要去大厂吗? #
188409次浏览 1765人参与
# 双非本科的出路是什么? #
208573次浏览 1565人参与
# 最难的技术面是哪家公司? #
65361次浏览 971人参与
# 机械/制造每日一题 #
86598次浏览 1445人参与
