আমার কাছে 2 টি ম্যাট্রিক রয়েছে এবং আমার সেগুলি গুণ করতে হবে এবং তারপরে প্রতিটি ঘরের ফলাফল মুদ্রণ করতে হবে। যত তাড়াতাড়ি একটি ঘর প্রস্তুত হওয়ার সাথে সাথে এটি মুদ্রণ করা দরকার, তবে উদাহরণস্বরূপ আমাকে [0] [0] সেলটি [2] [0] এর আগে প্রিন্ট করতে হবে যদিও [2] [0] এর ফলাফল প্রথমে প্রস্তুত থাকলেও । সুতরাং আমার এটি অর্ডার দ্বারা মুদ্রণ করা প্রয়োজন। সুতরাং আমার ধারণা প্রিন্টারের থ্রেডটি অপেক্ষা না করা অবধি অপেক্ষা করা multiplyThread
উচিত যে সঠিক সেলটি মুদ্রণের জন্য প্রস্তুত এবং তারপরে printerThread
সে সেলটি মুদ্রণ করবে এবং প্রত্যাবর্তনে ফিরে যাবে ইত্যাদি।
সুতরাং আমার কাছে এই থ্রেডটি রয়েছে যা গুণ রয়েছে:
public void run()
{
int countNumOfActions = 0; // How many multiplications have we done
int maxActions = randomize(); // Maximum number of actions allowed
for (int i = 0; i < size; i++)
{
result[rowNum][colNum] = result[rowNum][colNum] + row[i] * col[i];
countNumOfActions++;
// Reached the number of allowed actions
if (countNumOfActions >= maxActions)
{
countNumOfActions = 0;
maxActions = randomize();
yield();
}
}
isFinished[rowNum][colNum] = true;
notify();
}
প্রতিটি ঘরের ফলাফল মুদ্রণ করে এমন থ্রেড:
public void run()
{
int j = 0; // Columns counter
int i = 0; // Rows counter
System.out.println("The result matrix of the multiplication is:");
while (i < creator.getmThreads().length)
{
synchronized (this)
{
try
{
this.wait();
}
catch (InterruptedException e1)
{
}
}
if (creator.getmThreads()[i][j].getIsFinished()[i][j] == true)
{
if (j < creator.getmThreads()[i].length)
{
System.out.print(creator.getResult()[i][j] + " ");
j++;
}
else
{
System.out.println();
j = 0;
i++;
System.out.print(creator.getResult()[i][j] + " ");
}
}
}
এখন এটি আমাকে এই ব্যতিক্রমগুলি ছুঁড়েছে:
Exception in thread "Thread-9" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-6" Exception in thread "Thread-4" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-5" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-8" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-7" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-11" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-10" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
Exception in thread "Thread-12" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at multiplyThread.run(multiplyThread.java:49)
লাইন 49-এ multiplyThread
হ'ল "অবহিত ()" .. আমার মনে হয় যে আমাকে সিঙ্ক্রোনাইজ করা অন্যভাবে ব্যবহার করা দরকার তবে কীভাবে তা নিশ্চিত তা নয়।
যদি কেউ এই কোডটিকে কাজ করতে সহায়তা করতে পারে তবে আমি সত্যই এটির প্রশংসা করব।
while(!JobCompleted);
বিকল্প সাধারণত একটি খারাপ ধারণা করা হয়েছে কারণ এটি 100% ক্রমাগত একই পরিবর্তনশীল পরীক্ষণ আপনার CPU- র বেঁধে (দেখতে এখানে )