创建一个线程类继承Thread类
public class MyThread extends Thread {
//继承一个类:Thread,具备争抢资源的能力
//通过构造器 设置线程名称
public MyThread(String name){
super(name);//调用父类有参构造器
}
//必须重写Thread类中的run方法
@Override
public void run() {
for (int i= 0;i<=10;i++){
// System.out.println(this.getName()+i);// this.getName()获取线程名字 Thread.currentThread().getName()
System.out.println(this.getName()+i);
}
}
}
测试类
public static void main(String[] args) {
/*
* 并行和并发
* 并行:多个CPU同时执行多个任务
* 并发:一个CPU"同时"执行多个任务(采用时间片切换)
* */
// Thread.currentThread() 获取当前正在执行的线程
Thread.currentThread().setName("主线程");
for (int i= 0;i<=10;i++){
System.out.println(Thread.currentThread().getName()+i);
}
//创建一个线程类
// MyThread mt=new MyThread();
MyThread mt=new MyThread("子线程");
// mt.setName("子线程");//设置线程的方法
mt.start();//start方法式Thread类的方法
for (int i= 0;i<=10;i++){
System.out.println("main2----------->"+i);
}
}
模拟买火车票
模拟100人在3个窗口抢10张火车票
售票类
public class BuyTicketThread extends Thread {
public BuyTicketThread(String name){
super(name);
}
// 一共10张票
static int ticketNum = 10;//多个对象共享10张票
//每个窗口就是一个线程对象: 每个对象执行的代码放入run方法中
@Override
public void run() {
//每个窗口后面有100个人在抢票
for (int i = 1; i <= 100; i++) {
if (ticketNum > 0) {
System.out.println(this.getName()+"买到了从广州到北京的第" + (ticketNum--) + "张车票");
}
}
}
}
测试类
public static void main(String[] args) {
//三个窗口 三个线程对象
BuyTicketThread t1 = new BuyTicketThread("窗口1---->");
t1.start();
BuyTicketThread t2 = new BuyTicketThread("窗口2---->");
t2.start();
BuyTicketThread t3 = new BuyTicketThread("窗口3---->");
t3.start();
}