, : SeparateExecution , , , , , ?
, SeparateExecution, , , , . , SeparateExecution, , , , start(), . .
: . , , , ( ), -var. , , 1,5 x , , .
public class Threadly {
public static void main(String[] args) throws InterruptedException {
doLocalVar();
doInMainThread();
doMultiThreaded();
}
private static void doLocalVar() {
long count = 0L;
long startTime = System.currentTimeMillis();
long endTime = startTime;
while (endTime - startTime < 1000L) {
count += 1L;
endTime = System.currentTimeMillis();
}
System.out.println("local: elapsed=" + (endTime - startTime) + ", count=" + count);
}
private static void doInMainThread() {
Spinner spinner = new Spinner("main");
spinner.run();
spinner.show();
}
private static void doMultiThreaded() throws InterruptedException {
int numThreads = Runtime.getRuntime().availableProcessors();
Thread[] threads = new Thread[numThreads];
Spinner[] spinners = new Spinner[numThreads];
for (int i=0 ; i<numThreads ; i++) {
spinners[i] = new Spinner("t-" + Integer.toString(i));
threads[i] = new Thread(spinners[i]);
}
for (Thread thread : threads)
thread.start();
for (Thread thread : threads)
thread.join();
for (Spinner spinner : spinners)
spinner.show();
}
private static class Spinner implements Runnable {
private long startTime;
private long endTime;
private long count;
private final String name;
Spinner(String name) {
this.name = name;
}
public void run() {
count = 0L;
startTime = System.currentTimeMillis();
endTime = startTime;
while (endTime - startTime < 1000L) {
count += 1L;
endTime = System.currentTimeMillis();
}
}
void show() {
System.out.println(name + ": elapsed=" + (endTime - startTime) + ", count=" + count);
}
}
}