Чтобы очистить текущую ячейку памяти массива, используйте: 'myArray.length = 0'
или 'myArray.pop() UN-till its length is 0'
length
: вы можете установить свойство length для усечения массива в любое время. Когда вы расширяете массив, изменяя его свойство length, число фактических элементов увеличивается. pop()
: метод pop удаляет последний элемент из массива и возвращает его удаленное значение. shift()
: метод сдвига удаляет элемент с нулевым индексом и сдвигает значения в последовательных индексах вниз, а затем возвращает удаленное значение. Пример:
var arr = ['77'];
arr.length = 20;
console.log("Increasing : ", arr); // (20) ["77", empty × 19]
arr.length = 12;
console.log("Truncating : ", arr); // (12) ["77", empty × 11]
var mainArr = new Array();
mainArr = ['1', '2', '3', '4'];
var refArr = mainArr;
console.log('Current', mainArr, 'Refered', refArr);
refArr.length = 3;
console.log('Length: ~ Current', mainArr, 'Refered', refArr);
mainArr.push('0');
console.log('Push to the End of Current Array Memory Location \n~ Current', mainArr, 'Refered', refArr);
mainArr.poptill_length(0);
console.log('Empty Array \n~ Current', mainArr, 'Refered', refArr);
Array.prototype.poptill_length = function (e) {
while (this.length) {
if( this.length == e ) break;
console.log('removed last element:', this.pop());
}
};
new Array() | []
Создайте массив с новой ячейкой памяти с помощью Array constructor
или array literal
. mainArr = []; // a new empty array is addressed to mainArr.
var arr = new Array('10'); // Array constructor
arr.unshift('1'); // add to the front
arr.push('15'); // add to the end
console.log("After Adding : ", arr); // ["1", "10", "15"]
arr.pop(); // remove from the end
arr.shift(); // remove from the front
console.log("After Removing : ", arr); // ["10"]
var arrLit = ['14', '17'];
console.log("array literal « ", indexedItem( arrLit ) ); // {0,14}{1,17}
function indexedItem( arr ) {
var indexedStr = "";
arr.forEach(function(item, index, array) {
indexedStr += "{"+index+","+item+"}";
console.log(item, index);
});
return indexedStr;
}
slice()
: Используя функцию среза, мы получаем мелкую копию элементов из исходного массива, с новым адресом памяти, так что любая модификация на cloneArr не повлияет на фактический исходный массив. var shallowCopy = mainArr.slice(); // this is how to make a copy
var cloneArr = mainArr.slice(0, 3);
console.log('Main', mainArr, '\tCloned', cloneArr);
cloneArr.length = 0; // Clears current memory location of an array.
console.log('Main', mainArr, '\tCloned', cloneArr);
Я нахожу, что ScheduledExecutorService является отличным способом сделать это. Это возможно немного более сложно, чем Timer
, но дает больше гибкости в обмен (например, Вы могли принять решение использовать единственный поток или пул потоков; это берет единицы кроме только миллисекунд).
ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor();
Runnable periodicTask = new Runnable() {
public void run() {
// Invoke method(s) to do the work
doPeriodicWork();
}
};
executor.scheduleAtFixedRate(periodicTask, 0, 10, TimeUnit.SECONDS);
Взгляните на Таймер и классы TimerTask . Они точно, что Вы хотите.
можно сделать реализацию TimerTask, которая берет объект потока в конструкторе.
метод выполнения затем назовет потоки выполненным методом.
// Perhaps something like this
Timer t = new Timer();
t.scheduleAtFixedRate(yourTimerTask, 0, 10 * 1000);
// Hopefully your task takes less than 12 seconds
Одна опция состоит в том, чтобы создать ScheduledExecutorService, к которому можно затем запланировать задание:
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.scheduleWithFixedDelay(...);
, Если Вы действительно решали иметь несколько потоков, затем можно создать ScheduledExecutorService с большим количеством потоков (снова через класс Исполнителей).
С точки зрения того, сколько потоков и что Вы вставляете каждый поток, с точки зрения производительности, я сказал бы, это зависит от: