创建新的线程
创建新的线程有两种方式,其一是将类申明为Thread子类,该子类去重写Thread的run方法。
这里我们创建SubThread类去继承Thread类,然后重写run()方法,为了看得清楚我们选择打印1-50,然后在main()方法里面去实例化对象SubThread并调用.start()方法。这是第一个线程。
第二个线程就很简单了,直接就是主函数自己的线程。这里为了看着清楚,我们也选择去打印1-50。
观察结果,可以发现,在run线程执行的时候,偶尔也会有main线程的执行结果出现。
创建的另一种方法是申明实现Runable接口的类,然后该类实现run方法(其实也是重写)。这样做的好处是将线程对象和线程任务做到了分离,解开了耦合性。
步骤如下:首先是实例化SubRunable类,然后实例化Thread类,并将实例化的sr放入Thread()中。最后,再用 t 去调用start()方法。观察结果,同样也可以发现四多线程的输出结果。
获取线程的名字
main方法是静态的方法,想要获得main方法线程的名字也得用静态方法,JAVA中定义了一个静态方法currentThread,用currentThread方法实例化对象调用自身方法getName是获得main线程名字的唯一途径。
新开的线程的名字的获得就显得相对简单,可以直接调用getName方法,这是一个动态方法。
睡眠方法
因为sleep方法中可能会出现异常,所以要抛出异常。sleep()方法是静态方法,可以直接调用。如果是自己的线程调用sleep方法,因为SleepThread是Thread的子类,但Thread没有抛出异常,所以子类则需要try和catch抛出异常。
Thread.sleep(...)括号里面的数字是按照毫秒计算的,所以1000就是睡眠一秒。