关注
多线程编程的实战技巧主要包括线程操纵资源类、避免虚假唤醒、使用锁和条件变量等工具。以下是一个具体的例子:
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(
查看原帖
点赞 评论
相关推荐
07-03 19:41
门头沟学院 Java 点赞 评论 收藏
分享
![](https://static.nowcoder.com/fe/file/oss/1715049343797JOCFB.png)
点赞 评论 收藏
分享
牛客热帖
正在热议
# 24届的你们都什么时候入职? #
12501次浏览 133人参与
# 我的实习求职记录 #
3752139次浏览 59872人参与
# 极具前瞻性,现代汽车编程题 #
33421次浏览 564人参与
# 25届暑期实习 #
651131次浏览 13063人参与
# 实习好累,可以辞职全力准备秋招吗 #
17487次浏览 416人参与
# 24届软开秋招面试经验大赏 #
1398733次浏览 20150人参与
# 0offer是寒冬太冷还是我太菜 #
515537次浏览 5560人参与
# 你收到了团子的OC了吗 #
597426次浏览 6850人参与
# 软件开发薪资爆料 #
1031474次浏览 13097人参与
# 在找工作求抱抱 #
495549次浏览 7127人参与
# 硬件人的简历怎么写 #
97562次浏览 1084人参与
# 我的成功项目解析 #
115791次浏览 3088人参与
# 嵌入式笔面经分享 #
8966次浏览 134人参与
# 华为开奖那些事 #
1215938次浏览 9733人参与
# 实习,投递多份简历没人回复怎么办 #
1475756次浏览 23658人参与
# 入职第一天,你准备什么时候下班 #
12784次浏览 102人参与
# 你觉得找工作该拿大厂还是小厂练手 #
80410次浏览 1094人参与
# 参加过提前批的机械人,你们还参加秋招么 #
20451次浏览 439人参与
# 你觉得比亚迪今年还有春招吗? #
55637次浏览 392人参与
# 双非本科求职如何逆袭 #
275633次浏览 3891人参与
# 如果可以选,你最想从事什么工作 #
253029次浏览 3648人参与