关注
多线程编程的实战技巧主要包括线程操纵资源类、避免虚假唤醒、使用锁和条件变量等工具。以下是一个具体的例子:
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(
查看原帖
点赞 评论
相关推荐
01-06 16:09
北京交通大学 Java 笑晕 以前面试前准备:背两天八股 刷一天leetcode现在面试前准备:洗头洗脸 吹个好看的造型 找个角度把自己拍的好看点 对着屏幕欣赏自己哈哈哈哈哈
哞客37422655...:别笑!😂 八股不一定会,但颜值先加分,这叫“形而上学”冲!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你最近因为什么迷茫? #
9925次浏览 175人参与
# 实习怎么做才有更好的产出 #
2043次浏览 72人参与
# 上班以后,你还有哪些坚持的爱好? #
1389次浏览 45人参与
# AI coding的好用工具分享 #
2747次浏览 94人参与
# 领导做过最不靠谱的事 #
4581次浏览 82人参与
# 实习生工资多少才算正常? #
3242次浏览 77人参与
# 实习心态崩了 #
100479次浏览 513人参与
# 找工作以来,你最看不惯__ #
2559次浏览 70人参与
# 你都在哪些场所面过试? #
4249次浏览 67人参与
# 你给AI提过哪些离谱的需求? #
1504次浏览 47人参与
# 哪些公司开春招了? #
1804次浏览 29人参与
# 秋招有哪些公司要求提前实习 #
102695次浏览 545人参与
# 非技术岗投递进展 #
166645次浏览 1317人参与
# 新年的第一句祝福 #
53597次浏览 389人参与
# 华为保温 #
169633次浏览 642人参与
# 实习转正进行时 #
138656次浏览 897人参与
# 工作压力大怎么缓解 #
132423次浏览 1139人参与
# 24届的你们现状如何了? #
107284次浏览 515人参与
# 你觉得第一学历对求职有影响吗? #
222257次浏览 1229人参与
# 上班苦还是上学苦呢? #
320199次浏览 2052人参与
查看5道真题和解析