并发测试JavaDemo
/**
* @author Jerry Lee
*/
public class Testee {
static long countTimeIn500ms =0;
public static void main(String[] args) throws Exception {
countTimeIn500ms = guessCountTimeIn500ms();
Thread runAndSleepTask =new Thread(new RunAndSleepTask(), "RunAndSleepTask");
Thread runAndWaitTask =new Thread(new RunAndWaitTask(), "RunAndWaitTask");
Thread runAndLongSleepTask =new Thread(new RunAndLongSleepTask(), "RunAndLongSleepTask");
runAndSleepTask.start();
runAndWaitTask.start();
runAndLongSleepTask.start();
System.out.println("Tasks started!");
Thread.sleep(Long.MAX_VALUE);
}
public static class RunAndSleepTask implements Runnable {
@Override
public void run() {
String name =Class().getSimpleName();
while (true) {
for (long i =0; i < countTimeIn500ms; i++) {
}
System.out.println(name +": "+new Date());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static class RunAndWaitTask implements Runnable {
@Override
public void run() {
String name =Class().getSimpleName();
while (true) {
for (long i =0; i < countTimeIn500ms; i++) {
}
try {
System.out.println(name +": "+new Date());
synchronized (this) {
this.wait(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static class RunAndLongSleepTask implements Runnable {
@Override
public void run() {
String name =Class().getSimpleName();
String name =Class().getSimpleName();
while (true) {
for (long i =0; i < countTimeIn500ms; i++) {
}
System.out.println(name +": "+new Date());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* @return 100ms可以做{@code long}的计数次数。
*/
static long guessCountTimeIn500ms() {
System.out.println("start guess.");
long count =1000L*1000*1000;
// simple warm-up
for (long i =0; i < count; i++) {
// nothing!
}
long tick = System.currentTimeMillis();
for (long i =0; i < count; i++) {
// nothing!
}
long duration = System.currentTimeMillis() - tick;
System.out.printf("1G times count take %d ms.\n", duration);
return count *500/ duration;
}
}