📄 example.java
字号:
import java.lang.Runnable;
import java.lang.Thread;
//注意,每次运行的结果可能会不同,只是线程执行先后的顺序不同造成的。
//负责卖票的类
class TicketSeller {
int fiveNumber=3,tenNumber=0,twentyNumber=0;
public synchronized void sellTicket(int recieveMoney)
{
if(recieveMoney==5)
{
fiveNumber++;
System.out.print(Thread.currentThread().getName()+"给我5元钱,这是你的一张电影票\n");
}
else
if(recieveMoney==10)
{
while(fiveNumber<1)
{
try{
System.out.print(Thread.currentThread().getName()+"等待\n");
wait();//如果线程此时占用CPU 则会进入中断状态
System.out.print(Thread.currentThread().getName()+"结束等待\n");
}catch(InterruptedException e)
{System.out.print(e.getMessage());}
}
fiveNumber--;
tenNumber++;
System.out.print(Thread.currentThread().getName()+"给我10元钱,找您5元,这是你的一张电影票\n");
}
else
if(recieveMoney==20)
{
while(fiveNumber<1||tenNumber<1)
{
try{
System.out.print(Thread.currentThread().getName()+"等待\n");
wait();
System.out.print(Thread.currentThread().getName()+"结束等待\n");
}catch(InterruptedException e)
{System.out.print(e.getMessage());}
}
fiveNumber--;
tenNumber++;
System.out.print(Thread.currentThread().getName()+"给我20元钱,找您15元,这是你的一张电影票\n");
}
notifyAll();
}
}
class cinema implements Runnable
{
Thread zhang ,li,zhao;//电影院中买票的进程
TicketSeller seller;//售票员
cinema(){
zhang = new Thread(this);
li = new Thread(this);
zhao = new Thread(this);
zhang.setName("张三");
li.setName("李四");
zhao.setName("赵五");
seller = new TicketSeller();
}
public void run()
{
if(Thread.currentThread()==zhang)
{
seller.sellTicket(20);
}
else
if(Thread.currentThread()==li)
{
seller.sellTicket(10);
}
else
if(Thread.currentThread()==zhao)
{
seller.sellTicket(5);
}
}
}
public class Example
{
public static void main(String[] args)
{
cinema ma = new cinema();
ma.zhang.start();
ma.li.start();
ma.zhao.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -