java - 方法中一次只能有一个字符串

标签 java concurrency

我有一个单例方法:

public void myMethod(String x){
    //do lengthy process on x
}

我有三个线程调用 myMethod:

  1. Thread A, x="word" --> start at 05.00.01pm, finished at 05.00.10pm
  2. Thread B, x="sentence" --> start at 05.00.01pm, finished at 05.00.08pm
  3. Thread C, x="word" --> start at 05.00.02pm, finished at ???

如您所见,线程 C 应该等到线程 A 完成,因为线程 C 也在发送单词 >。但是,即使在线程 A 完成之前,线程 B 也可以执行 myMethod,因为它发送的是 sentence 而不是

myMethod会被频繁调用,并且myMethod中的参数x没有规则,所以我不认为保存所有可能的值对于参数x是可行的

仅供引用:虽然“x”参数的字符串长度不受限制,但字符保证仅为字母数字(a..zA..Z0..9),没有奇怪的重音字符 我该怎么做?

最佳答案

您可以通过在方法中放置一个基于字符串规范表示的同步块(synchronized block)来实现此目的

public void myMethod(String x){
   synchronized(x.intern()){
    //do lengthy process on x
   }
}

关于java - 方法中一次只能有一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34922821/

相关文章:

java - 什么是更好的 ?使用双反斜杠 ('\\' ) 作为文件分隔符或 Files.separator 来删除 O.S.在 Java 中处理文件时的依赖性

java - 从JSONarray中获取具体值

java - 如何将在循环中查找文件的 Try-catch 语句放入其中?

java - 如何制作用户可调整大小的 JTextArea?

mysql - MySQL Nodejs并发访问多表

java - 没有 happens-before 的安全发布?除了 final 还有什么?

java - Selenium WebDriver manager().getCookies() 总是返回 0

c++ - 调用线程会在 thread.join() 之后看到对局部变量的修改吗?

java - 休息服务: prevent concurrent invocations per user

java.util.NoSuchElementException : No line found error java