与Java Regex Thread Safe类似?,我想知道scala正则表达式的这种用法是否真的是线程安全的?多个线程是否能够在同一个对象M上调用m而不会在结果中相互干扰?
object R {
val pat = """a(\d)""".r
}
class M {
def m(s: String): Option[Int] = {
s match {
case R.pat(i) => Some(i.toInt)
case _ => None
}
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ral 13
有不止一个班级.它分解为:
scala.util.matching.Regex
要看java.util.regex.Pattern,所以,根据JavaDoc中,线程安全的.scala.util.matching.Regex.Matchjava.util.regex.Match因此,根据JavaDoc,它不
依赖于线程安全.scala.util.matching.Regex.MatchIterator
是可变的,包含java.util.regex.Match,所以不是线程安全的.scala.util.matching.Regex.MatchData
在技术上是线程安全的,但它只出现在上面两个类的一部分,所以你将找不到线程安全的实例MatchData.由于Scala对正则表达式的支持建立在java.util.regex.Pattern之上,并且由于该类的实例是线程安全的,我想答案是:是的:
它使用java.util.regex.Pattern:
class Regex(regex: String, groupNames: String*) extends Serializable {
import Regex._
/** The compiled pattern */
val pattern = Pattern.compile(regex)
Run Code Online (Sandbox Code Playgroud)
根据JavaDoc on Pattern,java.util.regex.Pattern是线程安全的:
此类的实例是不可变的,并且可以安全地供多个并发线程使用.
| 归档时间: |
|
| 查看次数: |
1186 次 |
| 最近记录: |