В последнее время я веду Java-проект, и в группе мы обсуждаем плюсы и минусы Java! К сожалению, некоторые фанаты Java всегда утверждают, что производительность уже не так плоха, как у C++, а многие стандартные библиотеки написаны мастерами, насколько они стабильны и т. д. Я просто внимательно изучил его, и одна из инструкций, которую мне дали, заключалась в том, что для доставки сообщений между потоками достаточно использовать BlockingQueue, инкапсулированную в java.
Поскольку этого достаточно, давайте напишем код для его тестирования. Просто напишите небольшую программу и проведите небольшое тестирование:
импортировать базу.MyRunnable;
тест публичного класса
{
public static void main(String[] args)
{
Очередь BlockingQueue<Integer> = new LinkedBlockingQueue<Integer>();
java.lang.Runnable r = новый MyRunnable (очередь);
Поток t = новый поток (r);
т.старт();
пока (правда)
{
пытаться
{
пока (правда)
{
for(int i =0;i <10000;i++)
{
очередь.предложение (я);
}
}
}
поймать (Исключение e)
{
е.printStackTrace();
}
}
}
}
//Пакеты, которые необходимо добавить
пакетная основа;
импортировать java.lang.Runnable;
импортировать java.util.concurrent.*;
импортировать java.util.*;
публичный класс MyRunnable реализует Runnable
{
public MyRunnable (очередь BlockingQueue<Integer>)
{
this.queue = очередь;
}
публичный недействительный запуск()
{
Дата d = новая дата();
долгое время начала = d.getTime();
System.err.println(время начала);
число интервалов = 0;
пока (правда)
{
пытаться
{
Целое число я = this.queue.poll();
если (я! = ноль)
{
считать++;
}
если (счет == 100000)
{
Дата е = новая дата();
длинное время окончания = e.getTime();
System.err.println(счет);
System.err.println(время окончания);
System.err.print(время окончания - время начала);
перерыв;
}
}
поймать (Исключение e)
{
}
}
}
частная очередь BlockingQueue<Integer>;
}
В приведенном выше тестовом коде я использовал предложение и опрос. Давайте посмотрим на эти две функции реализации. Первая — предложение.