نظر: خطای اجرا در حل مساله تولید کننده و مصرف کننده به صورت چند نخی

ساخت وبلاگ

در حل مساله تولید کننده و مصرف کننده به صورت چند نخی در جاوا، چرا کد زیر دچار خطای زمان اجرا می شود؟

با فرض کد زیر برای تولید کننده:

public class Producer extends Thread{ List<Integer> data; public Producer(List<Integer> l) { data=l; } @Override public void run() { for (int i = 0; i < 10; i++) { synchronized (data) { int t=(int)(Math.random()*1000); data.add(t); System.out.println(this.getId()+":Add:"+t); data.notify(); } try { Thread.sleep((int)(Math.random()*100)); } catch (InterruptedException e) { e.printStackTrace(); } } }
}

و کد زیر برای مصرف کننده:

public class Consumer extends Thread{ List<Integer> data; public Consumer(List<Integer> l) { data=l; } @Override public void run() { for (int i = 0; i < 10; i++) { synchronized (data) { if(data.size()==0) try { data.wait(); } catch (InterruptedException e) { e.printStackTrace(); } try { Thread.sleep((int)(Math.random()*100)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(this.getId()+":Remove:"+data.remove(0)); } } }
}

و کد زیر برای روال اجرایی برنامه:

public class Admin { public static void main(String[] args) throws InterruptedException { List<Integer> list=new ArrayList<Integer>(); Thread[] threads={ new Producer(list), new Producer(list), new Consumer(list), new Consumer(list) }; for (Thread thread : threads) thread.start(); for (Thread thread : threads) thread.join(); }
}

جواب یاب...
ما را در سایت جواب یاب دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان javabyab بازدید : 131 تاريخ : جمعه 29 مرداد 1395 ساعت: 0:18