关注
多线程编程的实战技巧主要包括线程操纵资源类、避免虚假唤醒、使用锁和条件变量等工具。以下是一个具体的例子:
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(
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习在多还是在精 #
33128次浏览 230人参与
# 我的求职进度条 #
79356次浏览 1089人参与
# 平安产险科技校招 #
518次浏览 0人参与
# 秋招踩过的“雷”,希望你别再踩 #
79193次浏览 1048人参与
# 实习下班不想学习,正常吗? #
18763次浏览 169人参与
# 你现在会用到哪些AI技能? #
4309次浏览 71人参与
# 智慧芽求职进展汇总 #
1495次浏览 5人参与
# 你的房租占工资的比例是多少? #
64247次浏览 797人参与
# 你见过哪些工贼行为 #
15736次浏览 87人参与
# 你还有多少年退休? #
26439次浏览 192人参与
# 校招谈薪一定要知道的事 #
12485次浏览 110人参与
# 反问环节如何提问 #
114896次浏览 2451人参与
# 找工作中的小确幸 #
25113次浏览 257人参与
# 小马智行求职进展汇总 #
13311次浏览 49人参与
# 顺丰求职进展汇总 #
63053次浏览 313人参与
# 你觉得什么岗位会被AI替代 #
15616次浏览 173人参与
# 大厂VS公务员你怎么选 #
23587次浏览 347人参与
# 如果不考虑收入,你最想做什么工作? #
32445次浏览 185人参与
# 非技术岗投递进展 #
157681次浏览 1314人参与
# 总结:哪家公司面试体验感最好 #
69873次浏览 416人参与
# 金蝶求职进展汇总 #
53609次浏览 262人参与
# 在国企工作的人,躺平了吗? #
367816次浏览 3915人参与