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(); } } }}