1 实现Runnable接口
public class MyThread01 implements Runnable {
private int n = 10; //定义10个包子
@Override
public void run() {
while(n>0){
System.out.println(Thread.currentThread().getName()+"还有"+n+"个包子");
n--;
}
}
public static void main(String[] args) {
MyThread01 myThread = new MyThread01();
Thread t1 = new Thread(myThread,"线程A");
Thread t2 = new Thread(myThread,"线程B");
t1.start();
t2.start();
}
}
2 继承Thread类
public class MyThread02 extends Thread{
private int n = 10; //定义10个包子
private String name; //线程名
public MyThread02(String name) {
super();
this.name = name;
}
@Override
public void run() {
while(n>0){
System.out.println(this.name+"还有"+n+"个包子");
n--;
}
}
public static void main(String[] args) {
MyThread02 t1 = new MyThread02("线程A");
MyThread02 t2 = new MyThread02("线程B");
t1.start();
t2.start();
}
}
运行结果:
①线程B还有10个包子
线程B还有9个包子
线程A还有10个包子
线程B还有8个包子
线程B还有6个包子
线程B还有5个包子
线程B还有4个包子
线程B还有3个包子
线程A还有7个包子
线程B还有2个包子
线程A还有1个包子
线程A还有9个包子
线程A还有8个包子
线程B还有10个包子
线程B还有9个包子
线程A还有7个包子
线程A还有6个包子
线程A还有5个包子
线程A还有4个包子
线程A还有3个包子
线程A还有2个包子
线程A还有1个包子
线程B还有8个包子
线程B还有7个包子
线程B还有6个包子
线程B还有5个包子
线程B还有4个包子
线程B还有3个包子
线程B还有2个包子
线程B还有1个包子
区别: 实现Runnable接口线程共享10个包子,继承Thread类的的线程不共享包子,一共输出了20个包子。