
谁能帮我解释一下这一小段java代码
求大神,感谢privatetransientvolatilebooleancompiled=false;publicMatchermatcher(CharSequence...
求大神,感谢
private transient volatile boolean compiled = false;
public Matcher matcher(CharSequence input) {
if (!compiled) {
synchronized(this) { //特别是这儿开始的
if (!compiled)
compile();
}
}
Matcher m = new Matcher(this, input);
return m;
} 展开
private transient volatile boolean compiled = false;
public Matcher matcher(CharSequence input) {
if (!compiled) {
synchronized(this) { //特别是这儿开始的
if (!compiled)
compile();
}
}
Matcher m = new Matcher(this, input);
return m;
} 展开
展开全部
synchronized在JAVA里是加锁,这里的作用是保证多线程安全,比如一个线程在使用它的时候就会给compile()所占用的资源加上锁,第二线程在访问它的时候就不能访问。当compile()执行完成后,会将锁打开
追问
嗯嗯,感谢!!
能在解释一下这个么
Matcher m = new Matcher(this, input);
追答
Matcher是一个正则匹配的实例,this应该就是你的正则表达式,input是要你匹配的字符串
展开全部
synchronized(this) {...} 以当前实例为同步锁的同步代码段。
任何调用此实例的 matcher() 方法的线程在执行到些代码段时,都要同步(同时只能有一个线程在执行同步代码段。
例:
假如此方法为类 CLASSA 的成员方法,
CLASSA a=new CLASSA();
那么如果同时有多个线程调用 a.matcher(...) 方法,则只能有一个线程进入方法中的同步代码段,其它的会等待。
任何调用此实例的 matcher() 方法的线程在执行到些代码段时,都要同步(同时只能有一个线程在执行同步代码段。
例:
假如此方法为类 CLASSA 的成员方法,
CLASSA a=new CLASSA();
那么如果同时有多个线程调用 a.matcher(...) 方法,则只能有一个线程进入方法中的同步代码段,其它的会等待。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有多个线程调用这个方法的时候只能一个一个进来 没学过线程肯定不懂的啦
追问
能简单的帮我说一下是怎么运作的吗
感谢~
追答
怎么运作没用多线程编写效果是一样的。我比方说有一个成员变量 a线程把他修改成10 b线程把他修改成20 会串掉明白否 有可能程序不是你想要的结果 你预想 A先执行 最后结果是20结果b先执行了结果是10
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询