本帖最后由 山里孩子 于 2015-3-23 23:43 编辑
在下面程序中,正确是两个都执行,但是试的话只执行线程1,不执行线程2.
使用jdk1.8
老师演示的两个都执行
毕老师视频 :同步函数的锁是this
- class Ticket implements Runnable
- {
-
- public int ticket = 100;
- Object obj = new Object();
- boolean flag = true;
- public void run()
- {
- //使用第一种方法
- if ( flag )
- {
- synchronized(this)
- {
- while ( ticket > 0 )
- {
- try{Thread.sleep(10);
- }catch(Exception e){}//异常处理
- System.out.println(Thread.currentThread().getName()+" sales: ....."+ticket--);
- }
- }
- }
- else
- show();
- }
- //使用第二种方法调用
- public synchronized void show()
- {
- while ( ticket > 0 )
- {
- try{Thread.sleep(10);
- }catch(Exception e){}//异常处理
- System.out.println(Thread.currentThread().getName()+" sales:"+ticket--);
- }
- }
- }
- class ThreadDemo4
- {
- public static void main(String[] args)
- {
- Ticket t = new Ticket();
- Thread t1 = new Thread(t);
- Thread t2 = new Thread(t);
- t1.start();
-
- try
- {
- Thread.sleep(10);
- }
- catch ( Exception e )
- {
- }
-
- t.flag = false;
- t2.start();
- }
- }
复制代码
|
|