gpt4 book ai didi

java - 为什么我不能将 java 线程名称与字符串进行比较?

转载 作者:行者123 更新时间:2023-11-29 09:35:46 26 4
gpt4 key购买 nike

我有一个 java 线程代码。我有 3 个线程,我已经为所有线程命名。 2 个消费者线程名称 Consumer1Consumer2。名为 Producer 的生产者线程。我有一个同步方法,我尝试比较线程的名称。我希望如果线程名称是 consumer2,我希望它 hibernate 一段时间。像这样:

public synchronized String getReferer()
{
try{
String threadName = Thread.currentThread().getName();
System.out.println("Thread name: "+threadName);
System.out.println(" compatre"+threadName=="Consumer2");
if(threadName == "Consumer2"){
System.out.println("It is consumer2. ...wait, you #$%^!!!");
//this.wait();
}
}catch(Exception e){
this.displayAndExit(e);
}
String line = "";
int i = 0;
try{
finished = 0;
if(this.hostnames2.isEmpty()){
line = null;
}else{
line = this.hostnames2.take();
}
}catch(Exception e){
this.displayAndExit(e);
}
return line;
}
}

我一个接一个地启动所有线程,首先是生产者和消费者。如果我 s.o.p threadName 会发生什么,我可以在整个地方看到 Consumer1Consumer2。但是在第二个 s.o.p 中我看到了这样的东西!!!

Thread name: Consumer2 false

现在由于方法是同步的,线程在进入时将锁定它。那么如果它是 Consumer2 那么当两个语句刚好背靠背时,它与字符串“Consumer2”的比较怎么会失败??

这是线程的主要方法和调用。

public class OffensiveFilterApplicator 
{
public static void main(String [] args)
{
String pathToCSV = "src/unique_referer_dump3.txt";
CSVResourceHandler csvResHandler = new CSVResourceHandler(pathToCSV);
HostnameFileData hfd = new HostnameFileData();
HostnameReader hr = new HostnameReader(hfd, csvResHandler.getCSVFileHandler());
VexigoCallOps vco = new VexigoCallOps(hfd);
Thread producer = new Thread(hr);
Thread consumer1 = new Thread(vco);
Thread consumer2 = new Thread(vco);
producer.setName("Producer");
producer.start();
consumer1.setName("Consumer1");
consumer2.setName("Consumer2");
consumer1.start();
consumer2.start();
}
}

最佳答案

您不能使用 == 比较字符串。您必须使用 equals

阅读更多 What's the difference between ".equals" and "=="?

关于java - 为什么我不能将 java 线程名称与字符串进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com