RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

java第五课

来源: 作者: 时间:2007-08-25 点击:
synchronized(obj){
            
if(tickets>0){
                
try{
                    Thread.sleep(
10);
                }
catch(Exception e){
                    e.printStackTrace();
                }

                System.out.println(
"Synchronized-Method:"+Thread.currentThread().getName()+" sell ticket "+tickets);
                tickets
--;
            }

        }

    }

}

编译运行:

执行过程:

第一个线程先访问obj对象,加锁,然后进入睡眠状态;

然后第二个线程执行sell方法,对this对象进行加锁;

第二个进程进入sell方法后请求obj对象,所以进入等待状态,唤醒第一个线程;

第一个线程通过执行synchronized(this)请求this对象。

这就陷入了这样的循环等待:

第一个线程占有obj对象,而请求对this对象进行加锁;而第二个线程占有this对象,而请求对obj对象进行加锁。

双方互相等待,程序的执行不能够向前推进。

■  生产者-消费者问题

class Test{

上一篇:Java第四课
下一篇:java第六课
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章