引入:书写一个卖票小程序的代码
//卖票逻辑书写阶段
//使用继承Thread的方法
public class Sellingtickets extends Thread{
static int ticket=100;
@Override
/*
* 卖票逻辑:三个窗口卖票,也就是说,只要三个窗口有票,就需要不停的使用循环来进行卖票操作
* 工作过程,使用各自线程在循环体里开始卖票,cup随机分配在哪个窗口买票,所以卖票的票号会
* 显示在不同的线程当中*/
public void run() {
while(true){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"票号为"+ticket);
ticket--;
}
else{
break;//跳出此次循环
}
}
}
}
//main函数书写阶段
public class Test {
public static void main(String args[]){
Sellingtickets Thread1=new Sellingtickets();//创建线程1
Sellingtickets Thread2=new Sellingtickets();//创建线程2
Sellingtickets Thread3=new Sellingtickets();//创建线程3
Thread1.start();
Thread2.start();
Thread3.start();
}
}
运行结果
得到重票
得到错票
//代码实例
public class Sellingtickets extends Thread{
static int ticket=100;
static Lock A=new Lock();//造一把锁
@Override
/*
* 卖票逻辑:三个窗口卖票,也就是说,只要三个窗口有票,就需要不停的使用循环来进行卖票操作
* 工作过程,使用各自线程在循环体里开始卖票,cup随机分配在哪个窗口买票,所以卖票的票号会
* 显示在不同的线程当中*/
public void run() {
while(true){
synchronized (A){
if(ticket>0){
System.out.println(Thread.currentThread().getName()+"票号为"+ticket);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
ticket--;
}
else{
break;//跳出此次循环
}
}
}
}
}
运行结果(图未截完)