class Ticket implements Runnable
{
private int tick = 100;
Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)//条件为真,
{
while(true)//t1线程始终在这个循环里待着,死循环
{
synchronized(this)//这里用的是this锁
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"....code : "+ tick--);
}
}
}
}
else
while(true)//t2线程始终在执行这一句,while true。
show();
}
public synchronized void show()//这是同步代码快,也是用的this锁 和上面是一个锁,所以就同步了。
{
if(tick>0)
{
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(Thread.currentThread().getName()+"....show.... : "+ tick--);
}
}
}
class ThisLockDemo
{
public static void main(String[] args) //请分析下主函数中的执行顺序,以及各线程的执行原理和切换方式,毕老师说的主线程
//和其他线程线程有没有执行上的优先顺序
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);//1,创建t1,t2两个线程,将t作为参数传入其中
t1.start();//开启t1线程
try{Thread.sleep(10);}catch(Exception e){}//主线程读到这里。睡了10毫秒。。。
t.flag = false;//改变t的标记,让上面的if判断条件为假,判断是为假了,可是判断是只执行一次的
//里面是while(true)循环。。。所以t1会一直在while里循环着。
t2.start();//开启t2线程,由于if判断为false,所以t2直接走else,t1,t2,资源是共享的。
}
}
|