Java 如何用不同的值初始化每个线程
我需要创建三个具有不同数据的线程。我希望一个线程值不能影响另一个线程值,但这里一个线程值修改另一个线程变量值。我不知道该怎么办 这是我的示例类,它创建三个线程并用不同的值初始化变量Java 如何用不同的值初始化每个线程,java,multithreading,Java,Multithreading,我需要创建三个具有不同数据的线程。我希望一个线程值不能影响另一个线程值,但这里一个线程值修改另一个线程变量值。我不知道该怎么办 这是我的示例类,它创建三个线程并用不同的值初始化变量 public class One { public void processChange(final String userdata) { Two Thread1=null,Thread2=null,Thread3=null; data.put("type","one"); Thread1
public class One {
public void processChange(final String userdata)
{
Two Thread1=null,Thread2=null,Thread3=null;
data.put("type","one");
Thread1=new Two(data);
Thread1.setName("one");
Thread1.start();
data.put("type","two");
Thread2=new Two(data);
Thread2.setName("two");
Thread2.start();
data.put("type","three");
Thread3=new Two(data);
Thread3.setName("three");
Thread3.start();
}
}
另一个类扩展线程
public class Two extends Thread {
JSONObject data;
public Two(JSONObject data) {
this.data=data;
}
public Two() {
}
public void run()
{
log.debug(this.getName()+" and data is"+data.toString());
sendData(data);
log.debug("after running "+this.getName()+" and data is"+data.toString());
}
}
在执行上述代码之后。上次初始化jsonObject数据值包含所有线程。
我希望每个拥有jsonOjbect数据的线程都会不同,就像这样做。您需要为每个线程创建不同的JSONObject
JSONObject data1 = new JSONObject();
data1.put("type","one");
Thread1=new Two(data1);
Thread1.setName("one");
Thread1.start();
JSONObject data2 = new JSONObject();
data2.put("type","two");
Thread2=new Two(data2);
Thread2.setName("two");
Thread2.start();
您正在修改传递给所有线程的同一
数据对象。您需要为每个线程创建新对象,否则所有线程的“type”
值将已经是“three”
public void processChange(final String userdata)
{
Two Thread1=null,Thread2=null,Thread3=null;
JSONObject data1 = new JSONObject(); //*** SEE NOTE
data1.put("type","one");
Thread1=new Two(data1);
Thread1.setName("one");
Thread1.start();
JSONObject data2 = new JSONObject(); //*** SEE NOTE
data2.put("type","two");
Thread2=new Two(data2);
Thread2.setName("two");
Thread2.start();
JSONObject data3 = new JSONObject(); //*** SEE NOTE
data3.put("type","three");
Thread3=new Two(data3);
Thread3.setName("three");
Thread3.start();
}
}
注意:我不确定真正的构造函数是什么。最好使用复制构造函数(如果可用):newjsonobject(data)代码>java中有一个名为ThreadLocal的类可以解决您的问题