题目描述:
有4个线程和1个公共的字符数组。线程1的功能就是向数组输出A,线程2的功能就是向字符输出B,线程3的功能就是向数组输出C,线程4的功能就是向数组输出D。要求按顺序向数组赋值ABCDABCDABCD,ABCD的个数由线程函数1的参数指定。
Java实现:
import java.util.Scanner;
//临界资源
class CharBuffer{
private StringBuffer value = new StringBuffer();//共享变量
private int num = 0;//添加次数
private int order = 0;//信号量
public String getVal() {
return value.toString();
}
public CharBuffer(int num) {
this.num = num;
}
//临界区
public synchronized void put(char c, int order) {
if (this.order != order) {
try {
this.wait();//将锁让出来
} catch (InterruptedException e) {
e.printStackTrace();
}
return;
}
value.append(c);//将字母添加到共享资源

该博客探讨了如何在Java中使用多线程按特定顺序(ABCD)填充共享字符数组。线程1到4分别负责输出'A'到'D',通过`synchronized`关键字确保临界区操作的顺序性和原子性,同时利用`join()`方法协调线程间的执行次序。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



