浏览 1454 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-15
最后修改:2009-08-01
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(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |