关注
多线程编程的实战技巧主要包括线程操纵资源类、避免虚假唤醒、使用锁和条件变量等工具。以下是一个具体的例子:
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(
查看原帖
点赞 评论
相关推荐
查看17道真题和解析
点赞 评论 收藏
分享
11-13 23:19
西安邮电大学 摄影/摄像 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
340006次浏览 3243人参与
# 我的实习求职记录 #
6077354次浏览 83598人参与
# 阿里云管培生offer #
39228次浏览 544人参与
# 地方国企笔面经互助 #
4783次浏览 12人参与
# 运营商笔面经互助 #
91908次浏览 1329人参与
# 选完offer后,你后悔学本专业吗 #
22336次浏览 160人参与
# 百度开奖 #
191658次浏览 1223人参与
# 职场吐槽大会 #
89703次浏览 738人参与
# 海康威视求职进展汇总 #
401509次浏览 3414人参与
# 如果有时光机,你最想去到哪个年纪? #
23229次浏览 464人参与
# 国企还是互联网,你怎么选? #
89666次浏览 697人参与
# 如何一边实习一边秋招 #
998481次浏览 12679人参与
# 风评不好的公司,你会去吗? #
20496次浏览 94人参与
# 腾讯求职进展汇总 #
197726次浏览 1650人参与
# 银行笔面经互助 #
84200次浏览 887人参与
# 第一份工作应该选择高薪还是大平台 #
88674次浏览 589人参与
# bilibili求职进展汇总 #
33670次浏览 360人参与
# 许愿池 #
215217次浏览 2535人参与
# 国央企薪资爆料 #
12972次浏览 96人参与
# 正在实习的你,几点下班 #
53789次浏览 397人参与
# 学历or实习经历,哪个更重要 #
54566次浏览 428人参与
# 上班苦还是上学苦呢? #
77516次浏览 715人参与