https://github.com/oldratlee/fucking-java-concurrency
/** * @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 = this.getClass().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 = this.getClass().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 = this.getClass().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; }}
转载于:https://www.cnblogs.com/wangdaijun/p/7448863.html
相关资源:数据结构—成绩单生成器
转载请注明原文地址: https://win8.8miu.com/read-1452884.html