Если вы используете этот способ, вам не нужно импортировать какие-либо сторонние классы.
Если вы хотите объединить String
Пример кода для объединения двух строковых массивов
public static String[] combineString(String[] first, String[] second){
int length = first.length + second.length;
String[] result = new String[length];
System.arraycopy(first, 0, result, 0, first.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
Если вы хотите объединить Int
Пример кода для конкатенации двух целочисленных массивов
public static int[] combineInt(int[] a, int[] b){
int length = a.length + b.length;
int[] result = new int[length];
System.arraycopy(a, 0, result, 0, a.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
}
Вот метод Main
public static void main(String[] args) {
String [] first = {"a", "b", "c"};
String [] second = {"d", "e"};
String [] joined = combineString(first, second);
System.out.println("concatenated String array : " + Arrays.toString(joined));
int[] array1 = {101,102,103,104};
int[] array2 = {105,106,107,108};
int[] concatenateInt = combineInt(array1, array2);
System.out.println("concatenated Int array : " + Arrays.toString(concatenateInt));
}
}
Мы также можем использовать этот способ.
Спящий режим подходит для быстрых и грязных вещей . Но для вещей, которым требуется немного большей устойчивости или надежности, я предполагаю, что сон - это зло :) Проблема со сном в том, что поток (я предполагаю, что здесь Windows ...) действительно спит - планировщик не будет запускать поток до истечения некоторого времени по истечении интервала сна.
В течение этого времени поток ни от чего не просыпается. Это означает, что его нельзя отменить или разбудить для обработки какого-либо события. Конечно, процесс можно убить, но это не дает спящей нити возможности проснуться и что-нибудь очистить.
Я не знаком с Ruby, но полагаю, что в нем есть какое-то средство ожидания нескольких вещей. Если вы можете, я предлагаю вместо использования спящего режима использовать две вещи: \
Было бы даже лучше, если бы было какое-то событие, которое можно было бы использовать, чтобы сигнализировать о необходимости выполнить работу. Это позволит избежать опроса по таймеру. Обычно это приводит к более низкому использованию ресурсов и более отзывчивой системе.
но я предполагаю, что у него есть какое-то средство ожидания нескольких вещей. Если вы можете, я предлагаю вместо использования спящего режима использовать две вещи: \Было бы даже лучше, если бы было какое-то событие, которое можно было бы использовать, чтобы сигнализировать о необходимости выполнить работу. Это позволит избежать опроса по таймеру. Обычно это приводит к более низкому использованию ресурсов и более отзывчивой системе.
но я предполагаю, что у него есть какое-то средство ожидания нескольких вещей. Если вы можете, я предлагаю вместо использования спящего режима использовать две вещи: \Было бы даже лучше, если бы было какое-то событие, которое можно было бы использовать, чтобы сигнализировать о необходимости выполнить работу. Это позволит избежать опроса по таймеру. Обычно это приводит к более низкому использованию ресурсов и более отзывчивой системе.
Было бы даже лучше, если бы было какое-то событие, которое можно было бы использовать, чтобы сигнализировать о необходимости выполнить работу. Это позволит избежать опроса по таймеру. Обычно это приводит к более низкому использованию ресурсов и более отзывчивой системе.
Было бы даже лучше, если бы было какое-то событие, которое можно было бы использовать, чтобы сигнализировать о необходимости выполнить работу. Это позволит избежать опроса по таймеру. Обычно это приводит к более низкому использованию ресурсов и более отзывчивой системе.
Каждый раз, когда я чувствую необходимость заблокировать, я использую цикл событий; обычно либев. Вот привязка Ruby:
http://rev.rubyforge.org/rdoc/
В принципе, sleep
отлично подойдет, если вы хотите, чтобы ваш процесс переходил в спящий режим, не выполняя никаких действий. на заднем плане. Если вы когда-нибудь захотите сделать что-то еще, например, спать, а также дождаться, пока TCP-соединения или дескриптор файла станут читаемыми, вам придется использовать цикл событий. Так почему бы просто не использовать его в начале?
Поток вашего приложения будет следующим:
main {
Timer->new( after => 0, every => 60 seconds, run => { <do your work> } )
loop();
}
Когда вы хотите сделать что-то другое, вы просто создаете наблюдатель, и это происходит за вас. (Выполняемые вами задания также могут создавать наблюдателей.)
Если вам не нужен точный интервал, это имеет для меня смысл. Если вам нужно регулярно просыпаться без дрейфа, вы, вероятно, захотите использовать какой-то внешний таймер. Но когда вы спите, вы не используете ресурсы процессора. Это дорогой переключатель задач.
Хотя спящий режим (тайм-аут)
идеально подходит для некоторых проектов, следует иметь в виду одно важное предостережение.
Ruby устанавливает обработчики сигналов с помощью SA_RESTART
(см. здесь ), что означает, что ваш сон
(или эквивалентный select (nil, nil, nil, timeout)
) не может быть легко прерван. Ваш обработчик сигнала сработает, но программа вернется обратно в спящий режим
. Это может быть неудобно, если вы хотите своевременно отреагировать, скажем, на SIGTERM
.
Учтите, что ...
#! /usr/bin/ruby
Signal.trap("USR1") { puts "Hey, wake up!" }
Process.fork() { sleep 2 and Process.kill("USR1", Process.ppid) }
sleep 30
puts "Zzz. I enjoyed my nap."
... выполнение займет около 30 секунд, а не 2.
В качестве обходного пути вы можете вместо этого вызвать исключение в обработчике сигнала, которое прервало бы сон (или что-то еще!), Описанное выше. Вы также можете переключиться на цикл на основе select
и использовать вариант трюка self-pipe для «раннего» пробуждения при получении сигнала. Как отмечали другие, также доступны полнофункциональные библиотеки событий.
Во время сна он не использует CPU, но если вы спите долгое время, меня больше беспокоит работающий интерпретатор Ruby, удерживающий память, пока он ничего не делает. Это не так уж и важно.