定义一个类实现Runnable接口,卖票100张,四个线程,输出格式为“窗口1,还剩10张票”
,指定窗口3卖第10张票。
思路:
1、定义一个资源类实现Runnable接口
2、资源类重写run()方法,并加锁卖票
3、在测试类中创建线程并启动
*/
class SellTicket
{
public static void main(String[] args)
{
//创建一个资源对象
Tickets ticket = new Tickets();
//创建线程对象并传入资源对象
Thread t1 = new Thread(ticket);
Thread t2 = new Thread(ticket);
Thread t3 = new Thread(ticket);
Thread t4 = new Thread(ticket);
//设置线程名称
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t4.setName("窗口4");
//启动线程
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class Tickets implements Runnable
{
private int ticket = 100;
@Override
public void run()
{
while(true)
{
//加锁
synchronized(this)
{
//剩余票数不大于0就退出循环
if(ticket > 0)
{
try
{
Thread.sleep(100);
} catch (InterruptedException e)
{
e.printStackTrace();
}
//让窗口3卖第十张票
if(ticket == 10)
{
if(!Thread.currentThread().getName().equals("窗口3"))
{
continue;
}
}
System.out.println(Thread.currentThread().getName()+",还剩"+ ( --ticket )+"张票");
}
else
{
break;
}
}
}
}
} |
|