本帖最后由 黑马王振宇 于 2013-1-10 15:22 编辑
- class Ticket implements Runnable
- {
- private int tick = 100;
- Object obj = new Object();
- public void run()
- {
- while(true)
- {
- synchronized(obj)
- {
- if(tick>0)
- {
- //try{Thread.sleep(10);}catch(Exception e){}
- System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
- }
- }
- }
- }
- }
- class TicketDemo2
- {
- public static void main(String[] args)
- {
- Ticket t = new Ticket();
- Thread t1 = new Thread(t);
- Thread t2 = new Thread(t);
- Thread t3 = new Thread(t);
- Thread t4 = new Thread(t);
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
复制代码 疑惑:毕老师讲解的synchronized锁是当Thread-0线程进入synchronized标识的代码中时,程序就上锁了,然后执行锁住的代码中内容,
其他的Thread就进不来了,当Thread-0执行完,他释放锁,别的线程才能进来,于是他举个例子,火车上厕所,几个人排队,等先进去的哥们出来,
其他哥们才能进去,那么这里的意思就是:第一个哥们方便完出来,其他三个哥们抢着进去,但是实际你不能上完了开门出来还跟其他哥们抢接着上啊,
代码运行时候,一个线程连续抢着执行了好多次,如图
Thread-3....sale : 98
Thread-3....sale : 97
Thread-3....sale : 96
Thread-3....sale : 95
那么这里可以理解为,哥们方便完觉得又得上,于是和其他3个哥们开始抢?
这里的意思是,无论哪个线程先执行,在锁外边的,所有线程(包括在厕所里的)都有公平的执行权(而不是方便完的就不能抢了),这么理解对吗? |