谁帮我看看,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(); }}