求大神,感谢
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是要你匹配的字符串
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-12-26
synchronized(this) {...} 以当前实例为同步锁的同步代码段。
任何调用此实例的 matcher() 方法的线程在执行到些代码段时,都要同步(同时只能有一个线程在执行同步代码段。
例:
假如此方法为类 CLASSA 的成员方法,
CLASSA a=new CLASSA();
那么如果同时有多个线程调用 a.matcher(...) 方法,则只能有一个线程进入方法中的同步代码段,其它的会等待。
任何调用此实例的 matcher() 方法的线程在执行到些代码段时,都要同步(同时只能有一个线程在执行同步代码段。
例:
假如此方法为类 CLASSA 的成员方法,
CLASSA a=new CLASSA();
那么如果同时有多个线程调用 a.matcher(...) 方法,则只能有一个线程进入方法中的同步代码段,其它的会等待。
第2个回答 2014-12-26
有多个线程调用这个方法的时候只能一个一个进来 没学过线程肯定不懂的啦追问
能简单的帮我说一下是怎么运作的吗
感谢~
怎么运作没用多线程编写效果是一样的。我比方说有一个成员变量 a线程把他修改成10 b线程把他修改成20 会串掉明白否 有可能程序不是你想要的结果 你预想 A先执行 最后结果是20结果b先执行了结果是10