لقد قمت مؤخرًا بصيانة مشروع Java، وفي المجموعة نتحدث عن إيجابيات وسلبيات Java! لسوء الحظ، يدعي بعض المعجبين النهائيين بـ Java دائمًا أن الأداء لم يعد سيئًا مثل C++، وأن العديد من المكتبات القياسية كتبها أساتذة، ومدى استقرارها، وما إلى ذلك. لقد درستها بعناية ببساطة، وكانت إحدى التعليمات التي قدموها لي هي أنه لتسليم الرسائل بين سلاسل الرسائل، يكفي استخدام BlockingQueue، الذي تم تغليفه في Java.
نظرًا لأن هذا يكفي، فلنكتب رمزًا لاختباره، ما عليك سوى كتابة برنامج صغير وإجراء بعض الاختبارات:
import base.MyRunnable;
اختبار الطبقة العامة
{
الفراغ العام الثابت الرئيسي (String[] args)
{
BlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>();
java.lang.Runnable r = new MyRunnable(queue);
الموضوع t = موضوع جديد (ص)؛
t.start();
بينما (صحيح)
{
يحاول
{
بينما (صحيح)
{
ل(int i =0;i < 10000;i++)
{
queue.offer(i);
}
}
}
قبض (الاستثناء ه)
{
printStackTrace();
}
}
}
}
// الحزم التي يجب إضافتها
قاعدة الحزمة؛
import java.lang.Runnable;
import java.util.concurrent.*;
import java.util.*;
الطبقة العامة MyRunnable تنفذ Runnable
{
MyRunnable العامة (قائمة انتظار BlockingQueue<Integer>)
{
this.queue = queue;
}
تشغيل الفراغ العام ()
{
التاريخ د = تاريخ جديد ()؛
وقت بدء طويل = d.getTime();
System.err.println(starttime);
عدد صحيح = 0؛
بينما (صحيح)
{
يحاول
{
عدد صحيح i = this.queue.poll();
إذا (أنا ! = فارغة)
{
العد++;
}
إذا (العدد == 100000)
{
التاريخ e = تاريخ جديد ()؛
نهاية طويلة = e.getTime();
System.err.println(count);
System.err.println(endtime);
System.err.print(endtime - starttime);
استراحة؛
}
}
قبض (الاستثناء ه)
{
}
}
}
قائمة انتظار BlockingQueue<Integer> الخاصة؛
}
لقد استخدمت العرض والاستطلاع في كود الاختبار أعلاه، فلنلقي نظرة على وظيفتي التنفيذ هاتين