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);
}
}
}

京公网安备 11010502036488号