我写的一个多线程的例子,但打印线程不能退出,各位达人帮我看看。

xiaoxiao2026-04-18  5

谁帮我看看,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(); }}
转载请注明原文地址: https://www.6miu.com/read-5047586.html

最新回复(0)