Java多线程之启动线程的三种方式
1.继承Thread类
1. 继承Thead类并重写该类的run()方法,该run方法的方法体就代表了线程需要完成的任务
2. 创建子类的实例对象
3. 调用线程对象的start()方法来启动该线程
public class Thread1 extends Thread { @Override public void run() { for (int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"在Thread1里面执行"+i); } } }
public class ThreadTest { public static void main(String[] args){ for (int i=0;i<10;i++){ new Thread1().start(); System.out.println(Thread.currentThread().getName()+" 在main方法中执行 "+i); } } }
2. 实现Runnable接口
1.定义Runnable接口的实现类,并重写run方法,该run方法的方法体同样是该线程的线程执行体 2. 创建Runnable实现类的实力对象,并以这个实例对象作为Thread的target来创建Thread类;
3. 调用线程对象的start方法来启动该线程
public class Thread1 implements Runnable { public void run() { for (int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"在Thread1里面执行"+i); } } }
public class ThreadTest { public static void main(String[] args){ for (int i=0;i<10;i++){ new Thread(new Thread1()).start(); System.out.println(Thread.currentThread().getName()+" 在main方法中执行 "+i); } } }
main函数中名没有直接执行Thread1的run方法,而是将Thread1填入到了Thread中,使用start方法来启动。Runable实现类里包含run方法,仅仅作为线程执行体,而实际的线程对象依然是Thread实例对象,Thread为真正创建线程的对象。
3. 匿名内部类
本质上也是一个类实现了Runnable接口,重写了run方法,只不过这个类没有名字,直接作为参数传入Thread类public class ThreadTest { public static void main(String[] args){ new Thread(new Runnable() { public void run() { for (int i = 0; i < 50; i++) { System.out.println(Thread.currentThread().getName() + "执行" + i); } } }).start(); for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"执行"+i); } } }