kan ikke stoppe sorteringen
hej jeg skal have stoppet sorteringen i en ballthread koden er-----------------------------------------
public class BallThread extends Thread {
private BallFactory factory;
private BallStore store;
private BallBuffer fromBuffer;
private BallBuffer toBuffer;
private int ballColor;
private boolean finished;
public BallThread(int ballColor, BallFactory factory, BallStore store, BallBuffer fromBuffer, BallBuffer toBuffer) {
this.ballColor = ballColor;
this.factory = factory;
this.store = store;
this.fromBuffer = fromBuffer;
this.toBuffer = toBuffer;
finished = false;
}
public void run() {
int ball;
try {
while (!factory.isEmpty()) {
if (!fromBuffer.isEmpty())
ball = fromBuffer.decreaseBuffer();
else
ball = factory.generate();
if (ball == ballColor)
store.receive(ball);
else
toBuffer.increaseBuffer(ball);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
-----------------------------------------
public class Balls {
public static final int RED = 0;
public static final int WHITE = 1;
public static final int BLUE = 2;
public static void main(String[] args) {
BallFactory redFactory = new BallFactory(100);
BallFactory whiteFactory = new BallFactory(100);
BallFactory blueFactory = new BallFactory(100);
BallStore redStore = new BallStore("RED store");
BallStore whiteStore = new BallStore("WHITE store");
BallStore blueStore = new BallStore("BLUE store");
BallBuffer rwBuffer = new BallBuffer(10);
BallBuffer wbBuffer = new BallBuffer(10);
BallBuffer brBuffer = new BallBuffer(10);
BallThread redThread = new BallThread(Balls.RED, redFactory, redStore, brBuffer, rwBuffer);
BallThread whiteThread = new BallThread(Balls.WHITE, whiteFactory, whiteStore, rwBuffer, wbBuffer);
BallThread blueThread = new BallThread(Balls.BLUE, blueFactory, blueStore, wbBuffer, brBuffer);
redThread.start();
whiteThread.start();
blueThread.start();
try {
while (true) {
Thread.sleep(1000);
redStore.print();
blueStore.print();
whiteStore.print();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
-----------------------------------------
import java.util.*;
public class BallFactory {
private int number;
private final int maxNumber;
private Random random;
public BallFactory(int maxNumber) {
this.maxNumber = maxNumber;
number = 0;
random = new Random();
}
public boolean isEmpty() {
return (number >= maxNumber);
}
public int generate() {
number ++;
return random.nextInt(3);
}
}
---------------------------------------------
import java.util.*;
public class BallBuffer{
private ArrayList buffer;
private final int size;
public BallBuffer(int size){
this.size = size;
buffer = new ArrayList();
}
public synchronized void increaseBuffer(int value) throws InterruptedException {
while (buffer.size() >= size)
wait();
buffer.add(new Integer(value));
notifyAll();
}
public synchronized int decreaseBuffer() throws InterruptedException {
while( buffer.isEmpty() )
wait();
int value = ((Integer) buffer.get(0)).intValue();
buffer.remove(0);
notifyAll();
return value;
}
public synchronized boolean isEmpty() {
return buffer.isEmpty();
}
}
-------------------------------------------------
public class BallStore {
private int numberRed;
private int numberWhite;
private int numberBlue;
private final String name;
public BallStore(String name) {
numberRed = 0;
numberWhite = 0;
numberBlue = 0;
this.name = name;
}
public void receive(int x) {
if (x == Balls.RED)
numberRed++;
if (x == Balls.WHITE)
numberWhite++;
if (x == Balls.BLUE)
numberBlue++;
}
public void print() {
System.out.println("The store named " + name + " contains:");
System.out.println(numberRed + " red balls");
System.out.println(numberWhite + " white balls");
System.out.println(numberBlue + " blue balls");
System.out.println();
}
}
------------------------------------------------------------------
