一种是继承Thread类,另一种是实现runnable接口,继承的方式最大的局限就是不支持多继承,所以第二种方式用的比较多。
1.2.1继承Thread类案例:
public class MyExtendThread extends Thread{
@Override
public void run() {
super.run();
System.out.println("extends thread");
}
public static void main(String[] args) {
MyExtendThread thread = new MyExtendThread();
thread.start();
System.out.println("运行结束");
}
}
注意:run()方法的执行时间比较的晚,也就是说在使用多线程技术的时候,代码的运行结果与代码的执行顺序或调用顺序是无关的。start()方法使线程处于就绪状态,待CPU调度线程,然后线程处于运行中,或则说CPU是以随机的时间来调用线程中的run方法,所以会出现打印下面的结果。
1.2.2实现runnable接口
//1.1定义Runnable接口的实现类 class SecondThread implements Runnable{ //1.2重写其中的run方法 @Override public void run() { for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"===="+i); } } } public class Demo2 { public static void main(String[] args) { //2.创建Runnable的接口实现类的实例 SecondThread s1=new SecondThread(); SecondThread s2=new SecondThread(); //2.用Runnable的接口实现类的实例作为Thread的target,创建Thread对象 Thread t1=new Thread(s1); Thread t2=new Thread(s2,"Higgin"); //创建Thread对象的同时可以为之命名 //启动线程 t1.start(); t2.start(); for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"===="+i); } }