读书人

小弟我写的一个多线程的例子但打印线

发布时间: 2012-11-17 11:14:15 作者: rapoo

我写的一个多线程的例子,但打印线程不能退出,各位达人帮我看看。
谁帮我看看,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;}@Overridepublic 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;}@Overridepublic 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();}}


读书人网 >软件架构设计

热点推荐