假设大厅共有四台出号机,这就意味着有四个线程在工作,下面我们用 程序模拟一下叫号的过程,约定当天最多受理50笔业务,也就是说号码最多可以出到50
方法一: 继承Thread
public class TicketWindow extends Thread{
private final int Max = 50;
private String name;
private static int index =1;
public TicketWindow (String name) {
this.name = name;
}
@Override
public void run() {
while(index<=50) {
System.out.println(name +"现在叫号"+index++);
}
}
public static void main(String[] args) {
TicketWindow1 t1 = new TicketWindow1("一号窗口");
TicketWindow1 t2 = new TicketWindow1("二号窗口");
TicketWindow1 t3 = new TicketWindow1("三号窗口");
TicketWindow1 t4 = new TicketWindow1("四号窗口");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
方法二 实现runnable接口
public class TicketWindow implements Runnable{
private final int Max = 50;
private int index =1;
@Override
public void run() {
while(index<=50) {
System.out.println(Thread.currentThread() +"现在叫号"+index++);
}
}
public static void main(String[] args) {
final TicketWindow1 task = new TicketWindow1();
Thread t1 = new Thread(task,"一号窗口");
Thread t2 = new Thread(task,"二号窗口");
Thread t3 = new Thread(task,"三号窗口");
Thread t4 = new Thread(task,"四号窗口");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
方法一和方法二的区别是,方法一将index变量静态化,但是当数值变大的时候回涉及到线程安全的问题
–题目来自汪文君java多线程教材第一章