谁帮我看看,PrintOperation怎么结束呀? 或者是我的线程同步有问题?
public class Counter {
private int value;
private boolean isWritable = true;
public void add(){
value++;
}
public void print(){
System.out.println(value);
}
public boolean isWritable() {
return isWritable;
}
public void setWritable(boolean isWritable) {
this.isWritable = isWritable;
}
}
public class AddOperation implements Runnable {
private Counter counter;
private final int size;
public AddOperation(Counter counter, int size) {
this.counter = counter;
this.size = size;
}
@Override
public void run() {
try {
for (int i = 0; i < size; i++) {
synchronized (counter) {
if (!counter.isWritable()) {
counter.wait();
}
counter.add();
counter.setWritable(false);
counter.notify();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class PrintOperation implements Runnable{
private Counter counter;
private boolean canRun = true;
public PrintOperation(Counter counter) {
this.counter = counter;
}
@Override
public void run() {
while(canRun){
synchronized(counter){
if(counter.isWritable()){
try {
counter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
counter.print();
counter.setWritable(true);
counter.notify();
}
}
}
public void stopThread(){
synchronized(counter){
this.canRun = false;
counter.notify();
}
}
}
public class MultiThreadTest {
public final static int SIZE = 5;
public static void main(String[] args) {
Counter counter = new Counter();
AddOperation addOperation = new AddOperation(counter,SIZE);
PrintOperation printOperation = new PrintOperation(counter);
Thread addThread = new Thread(addOperation);
Thread printThread = new Thread(printOperation);
addThread.start();
printThread.start();
}
}