概述
/*
* 用两个线程进行:卖票
*
* 同步函数用的是哪一个锁呢?
* 函数需要被对象调用,那么函数都有一个所属对象引用。就是this.
* 所以同步函数使用的锁是this.
*
* 如何找问题:
* 1,明确哪些代码是多线程运行代码
* 2,明确共享数据
* 3,明确多线程运行代码中哪些语句是操作共享数据的。、
*/
class Ticket implements Runnable
{
//将票私有500张票
private int tick = 500;
//定义一个标记,用来切换两个线程
boolean flag = true;
//覆盖runnable中的run方法
public void run()
{
if(flag)
{
//打印车票
while(true)
{
//如果show方法被静态修饰,这里调用的对象是Ticket.class
synchronized(this)//因为run方法调用的show()方法,show方法调用的是this.所以这里是this
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"同步售票"+tick--);
}
}
}
}
else
while(true)
show();
}
//对操作共享数据的代码块进行封装
public synchronized void show()
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
//currentThread();获取线程名称
System.out.println(Thread.currentThread().getName()+"..同步函数售票.."+tick--);
}
}
}
public class _08线程同步 {
public static void main(String[]args)
{
Ticket t = new Ticket();
//创建线程
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
//当主函数执行到这儿时,让它停留10秒;原因是,main主函数线程会瞬间将两个线程开启执行,
//所以当线程执行到t.falg=false时,会直接执行到show方法
try{Thread.sleep(10);}catch(Exception e){}
t.flag = false;
t2.start();
}
}
最后
以上就是辛勤方盒为你收集整理的多线程演示:两个线程《卖票》的全部内容,希望文章能够帮你解决多线程演示:两个线程《卖票》所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复