实现方式一:继承Thread线程类
public class TestThread2 extends Thread {
//模拟多个窗口买票的场景
private static int num=300;
public void run(){
while(num>0){
//线程安全问题
System.out.println(this.getName()+"卖出了第"+num+"号票!");
num--;
}
}
public static void main(String[] args) {
TestThread2 tt1=new TestThread2();
tt1.setName("窗口一:");
tt1.start();
TestThread2 tt2=new TestThread2();
tt2.setName("窗口二:");
tt2.start();
TestThread2 tt3=new TestThread2();
tt3.setName("窗口三:");
tt3.start();
}
}
方式二:实现runnable接口
public class TestRunble2 implements Runnable{
//模拟多个窗口买票的场景
/*
* 实现Runable接口创建线程的好处:
* 1、资源共享性比继承Thread类好
* 2、避免的Java的单继承约束
*
* 综上所述:建议使用实现Runable方式创建线程
*/
private int num=300;
@Override
public void run() {
while(num>0){
//线程安全问题
System.out.println(Thread.currentThread().getName()+"卖出了第"+num+"号票!");
num--;
}
}
public static void main(String[] args) {
TestRunble2 tr=new TestRunble2();
Thread t=new Thread(tr);
t.setName("-窗口1-:");
t.start();
Thread t2=new Thread(tr);
t2.setName("-窗口2-:");
t2.start();
Thread t3=new Thread(tr);
t3.setName("-窗口3-:");
t3.start();
}
}