我必须创建一个对冲模拟器。有例如。它有10个段,每个段都应该有自己的专用线程模拟段的增长(每次我们要计算段是否长大时,我们都应该进行随机测试)。此外,还应该有一个额外的园丁线程。当它的大小达到 10 时,Garder 应该削减部分(然后他将其大小削减回初始级别 1 并在他的笔记中添加通知)。
我试图让它工作是这样的:
public class Segment implements Runnable {
private int currentSize;
@Override
public void run() {
if(Math.random() < 0.3)
incrementSize();
}
private synchronized void incrementSize() {
currentSize++;
}
public synchronized int getCurrentSize() {
return currentSize;
}
public synchronized void setCurrentSize(int newSize) {
currentSize = newSize;
}
}
public class Gardener implements Runnable {
private int[] segmentsCutAmount = new int[10]; //Gardener notes
private Collection<Segment> segments;
public Gardener(Collection<Segment> segmentsToLookAfter) {
segments = segmentsToLookAfter;
}
@Override
public void run() {
while(true) {
//Have no idea how to deal with 10 different segments here
}
}
}
public class Main {
private Collection<Segment> segments = new ArrayList<>():
public void main(String[] args) {
Main program = new Main();
for(int i = 0; i < 10; i++)
program.addSegment();
Thread gardenerThread = new Thread(new Gardener(program.segments));
}
private void addSegment(Collection<Segment> segments) {
Segment segment = new Segment();
Thread segmentThread = new Thread(segment);
segmentThread.start();
segments.add(segment);
}
}
当段达到最大高度时,我不确定我应该做什么。如果有 10 个园丁,每个人都可以观察一个片段,但不幸的是,园丁是一个孤独的射手——他没有家人,他的朋友很忙,不愿意帮助他。你愿意帮助我吗?:D 我一般都知道同步的基础知识 - 同步方法/块、锁、等待和通知方法,但这次我完全不知道该怎么做 :( 这就像可怕的死锁!当然我不希望被灌输。任何一种提示也会很有帮助。提前谢谢你,祝你有美好的一天!