一个简单展示异步的例子:
线程类:
public class MyThread extends Thread { @Override public void run () { try { //循环输出 for(int i = 0; i < 10; i++) { //线程睡眠随机时间(一秒内) int time = (int) (Math.random() * 1000); Thread.sleep(time); //输出线程名 System.out.println("run=" + Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } } }
测试类:
public class Test { public static void main(String[] args) { try { //生成线程实例 MyThread thread = new MyThread(); //设置线程名 thread.setName("myThread"); //开始线程 thread.start(); for (int i = 0; i < 10; i++) { int time = (int)(Math.random() * 1000); //线程睡眠 Thread.sleep(time); //打印 System.out.println("main=" + Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); } } }
输出:
main=main main=main main=main run=myThread main=main main=main run=myThread main=main run=myThread main=main main=main run=myThread main=main main=main run=myThread run=myThread run=myThread run=myThread run=myThread run=myThread
分析:
1.这里出现了"main=main"与"run=myThread"交替输出的情况,main线程和myThread线程交替执行的情况, 可以体现出其线程异步的特点;
2.这里调用Thread的start()方法, 把线程交给了线程规划器来管理线程, 其中使用sleep方法模拟了线程的挂起状态,由不规律的输出, 也体现出了CPU执行线程的时的不确定性;