异步-CPU执行线程的不确定性

时间:2022-12-18 19:48:11

一个简单展示异步的例子:

线程类:

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执行线程的时的不确定性;