Java多线程wait()、notify()小demo

    xiaoxiao2021-03-25  7

    public class MainActivity extends AppCompatActivity {

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinkedList buffer = new LinkedList(); int maxSize = 10; Thread producer = new Producer(buffer, maxSize, "PRODUCER"); Thread consumer = new Consumer(buffer, maxSize, "CONSUMER"); producer.start(); consumer.start(); }

    }

    //下面是两个子线程

    class Consumer extends Thread { private LinkedList queue; private int maxSize; public Consumer(LinkedList queue, int maxSize, String name){ super(name); this.queue = queue; this.maxSize = maxSize; } @Override public void run() { while (true) { synchronized (queue) { while (queue.isEmpty()) { Log.e(“TAG”,”Queue is empty,” + “Consumer thread is waiting” + ” for producer thread to put something in queue”); try { queue.wait(); } catch (Exception ex) { ex.printStackTrace(); } } Log.e(“TAG”,”Consuming value : ” + queue.remove()); queue.notifyAll(); } } } }

    class Producer extends Thread { private LinkedList queue; private int maxSize;

    public Producer(LinkedList queue, int maxSize, String name) { super(name); this.queue = queue; this.maxSize = maxSize; } @Override public void run() { while (true) { synchronized (queue) { while (queue.size() == maxSize) { try { Log.e("TAG","Queue is full, " + "Producer thread waiting for " + "consumer to take something from queue"); queue.wait(); } catch (Exception ex) { ex.printStackTrace(); } } Random random = new Random(); int i = random.nextInt(); Log.e("TAG","Producing value : " + i); queue.add(i); queue.notifyAll(); } } }

    }

    转载请注明原文地址: https://ju.6miu.com/read-156048.html

    最新回复(0)