Можно искать эти type()
функция.
Видят примеры ниже, но нет никакого "неподписанного" типа в Python точно так же, как Java.
Положительное целое число:
>>> v = 10
>>> type(v)
<type 'int'>
Большой положительное целое число:
>>> v = 100000000000000
>>> type(v)
<type 'long'>
Отрицательное целое число:
>>> v = -10
>>> type(v)
<type 'int'>
Литеральная последовательность символов:
>>> v = 'hi'
>>> type(v)
<type 'str'>
целое число С плавающей точкой:
>>> v = 3.14159
>>> type(v)
<type 'float'>
@Peter Lawrey
Некоторые операции используют вызовы ОС (такие как блокировка / циклические барьеры)
Это НЕ ОС (ядро) звонки. Реализовано с помощью простого CAS (который на x86 поставляется без свободной памяти)
Еще один: не используйте ArrayBlockingQueue, если вы не знаете, почему (вы используете его).
@OP: Посмотрите на ThreadPoolExecutor, он предлагает отличную среду для производителей и потребителей.
Изменить ниже :
, чтобы уменьшить задержку (исключая ожидание занятости), измените очередь на SynchronousQueue и добавьте следующее, как перед запуском потребителя
...
consumerThread.setPriority(Thread.MAX_PRIORITY);
consumerThread.start();
Это лучшее, что вы можете получить.
Edit2: здесь с синхронизацией. очередь. И не печатать результаты.
package t1;
import java.math.BigDecimal;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.SynchronousQueue;
public class QueueTest {
static final int RUNS = 250000;
final SynchronousQueue<Long> queue = new SynchronousQueue<Long>();
int sleep = 1000;
long[] results = new long[0];
public void start(final int runs) throws Exception {
results = new long[runs];
final CountDownLatch barrier = new CountDownLatch(1);
Thread consumerThread = new Thread(new Runnable() {
@Override
public void run() {
barrier.countDown();
try {
for(int i = 0; i < runs; i++) {
results[i] = consume();
}
} catch (Exception e) {
return;
}
}
});
consumerThread.setPriority(Thread.MAX_PRIORITY);
consumerThread.start();
barrier.await();
final long sleep = this.sleep;
for(int i = 0; i < runs; i++) {
try {
doProduce(sleep);
} catch (Exception e) {
return;
}
}
}
private void doProduce(final long sleep) throws InterruptedException {
produce();
}
public void produce() throws InterruptedException {
queue.put(new Long(System.nanoTime()));//new Long() is faster than value of
}
public long consume() throws InterruptedException {
long t = queue.take();
long now = System.nanoTime();
return now-t;
}
public static void main(String[] args) throws Throwable {
QueueTest test = new QueueTest();
System.out.println("Starting + warming up...");
// Run first once, ignoring results
test.sleep = 0;
test.start(15000);//10k is the normal warm-up for -server hotspot
// Run again, printing the results
System.gc();
System.out.println("Starting again...");
test.sleep = 1000;//ignored now
Thread.yield();
test.start(RUNS);
long sum = 0;
for (long elapsed: test.results){
sum+=elapsed;
}
BigDecimal elapsed = BigDecimal.valueOf(sum, 3).divide(BigDecimal.valueOf(test.results.length), BigDecimal.ROUND_HALF_UP);
System.out.printf("Avg: %1.3f micros%n", elapsed);
}
}