Java 如何在方法和线程之间共享字符串?

Java 如何在方法和线程之间共享字符串?,java,string,multithreading,selenium,volatile,Java,String,Multithreading,Selenium,Volatile,我目前正在使用一种方法从剪贴板中获取字符串形式的数据,但是我需要从另一种在不同线程上运行的方法访问此信息,我做了一些研究,遇到了易变字符串,但我不太确定如何在我的代码中实现它们,这是我代码的基础: public class MobileSite { public MobileSite(){ Thread thread = new Thread1(() -> { try { method1(); } catch (Exceptio

我目前正在使用一种方法从剪贴板中获取字符串形式的数据,但是我需要从另一种在不同线程上运行的方法访问此信息,我做了一些研究,遇到了易变字符串,但我不太确定如何在我的代码中实现它们,这是我代码的基础:

public class MobileSite {
public MobileSite(){
Thread thread = new Thread1(() -> {
         try {
             method1();
         } catch (Exception botFailed) {
              System.out.println("Bot Failed");

            }

    });

Thread thread = new Thread2(() -> {
         try {
             method2();
         } catch (Exception botFailed) {
              System.out.println("Bot Failed");

            }

    });


    thread1.start();
    thread2.start();

方法1获取数据,方法2需要使用字符串格式的数据如果任何人有任何建议,他们将不胜感激

我希望您使用StringBuilder而不是使用字符串。下面是一个工作示例

    StringBuilder txt = new StringBuilder();
public void method1() {
    txt.append("String assigned");      
}

public void method2() {
    System.out.println(txt.toString());
}

public MobileSite(){
    Thread thread1 = new Thread(() -> {
             try {
                 method1();
             } catch (Exception botFailed) {
                  System.out.println("Bot Failed");
                }
        });
    Thread thread2 = new Thread(() -> {
             try {
                 method2();
             } catch (Exception botFailed) {
                  System.out.println("Bot Failed");
                }
        });
        thread1.start();
        thread2.start();

}

听起来像是生产者-消费者的东西,看看例如。顺便说一句,缩小你发布到的代码不会有什么害处。@curiosa会仔细研究一下,快速扫描一下,看起来是正确的,谢谢,这也可以作为一个最小的可复制示例。你的代码示例不显示任何字符串,不显示任何“从剪贴板获取数据”,也不显示任何线程间通信的尝试。它所显示的只是创建了两个新线程——不知道它们是做什么的——以及一些基本的错误报告。如果您希望得到任何有用的答案,那么您至少应该显示一些带有注释的代码,如“在此处将字符串发布到其他线程”和“在此处从其他线程获取字符串”。此外,考虑到线程大部分时间是独立运行的,您可能需要考虑接收字符串的线程应该如何知道何时接收字符串。是否希望它等待另一个线程生成字符串?是否希望它定期检查另一个线程是否生成了字符串?当另一个线程生成字符串时,是否希望它被中断?如果生产者线程希望在消费者响应第一个字符串之前生成多个字符串,您希望发生什么?此示例可能不会打印“字符串分配”。它可以打印空字符串。这是一场竞赛,看thread2是在thread1调用
txt.append(…)
之前还是之后调用
txt.toString()。主线程使thread1领先,但这并不保证thread1总能赢得比赛。即使它在一个特定的JVM、一个特定的操作系统和一个特定的硬件平台上运行时总是获胜;在其他一些系统上,结果可能会有所不同……实际上,由于
StringBuilder
实例是由不同的线程访问的,没有任何同步,因此也可能出现其他结果(例如segfault)。