我想创建3个线程:一个线程生成一个随机字符串,一个线程将该字符串转换为小写字母,另一个线程计算该字符串中单词的出现频率。
我已经使用Generator
之类的构造函数创建了Convert
,Freq
和(int[] buffer, Semaphore mutex, Semaphore items, Semaphore spc)
。我创建了一个Start
类:
public class Start
{
static int first = 0;
static ind last = 0;
}
带有信号灯mutex
,items
和spc
。
这是我的run
类的Generator
方法。它可以正常工作,并生成长度为15的随机大写字符串。
public void run()
{
Random rand = new Random();
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int size = 15;
while (true)
{
try
{
char[] res = new char[size];
for (int i = 0; i < size; i++)
{
res[i] = alphabet.charAt(rand.nextInt(alphabet.length()));
}
System.out.println("String generated: " + String.valueOf(res));
spc.acquire();
mutex.acquire();
// buffer[Start.last] = res[0];
Start.last = (Start.last + 1) % 100;
mutex.release();
items.release();
Thread.sleep(4000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
我的问题是:如何制作Convert
和Freq
来读取数组?我知道如何转换为小写(当然)并计算数组中每个字母的频率。我已经使用run
和items.acquire();
为两个类创建了mutex.acquire()
方法,但是似乎没有任何作用。
感谢您为我提供帮助的时间^^
答案 0 :(得分:0)
当我对您的理解正确时,您希望运行Generator
线程生成字符串,运行Convert
线程转换生成的字符串,运行Freq
线程分析转换后的字符串。
由于所有三个线程都需要从其他线程读取结果,因此应将这些数据保存在上级类/方法中。您可以创建三个集合,例如newStrings
,convertedStrings
和frequencies
。您的Generator
线程将创建字符串并将其添加到newStrings
集合中。您的Convert
线程会查看newStrings
集合,并从中获取一个新字符串(通过删除所有旧字符串或计算索引),将其转换并将其添加到convertedStrings
集合中。然后,您的Freq
线程再次从convertedStrings
集合中获取一个新的转换后的String,计算该字符串中单词的出现频率,并将结果添加到frequencies
集合中。