2013-12-03 8 views
1

Мне нужно создать три потока с разными данными. Я хочу, чтобы одно значение потока не влияло на другое значение потока, но здесь одно значение потока, изменяющее другое значение переменной потока. Я не знаю, как это сделать.как инициализировать каждую нить с другим значением

это мой класс образцов, который создает три потока и инициализирует переменную с различным значением.

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()); 
} 
} 

после выполнения этого кода выше. last initialize Значение данных jsonObject содержит все потоки. Я хочу, чтобы каждая нить, имеющая данные jsonOjbect, будет отличаться.

ответ

0

сделать это. Вам нужно создать разные 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(); 
+0

спасибо за ответ в ближайшее время – ishwar

+0

@ishwar вас приветствуются ....... – Prabhakaran

0

Вы модифицируя тот же data объект, который передается всем потокам. Вам нужно будет создать новые объекты для каждого потока, иначе значение "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();  

    } 
} 

Примечание: Я не уверен, что настоящий конструктор. Вероятно, лучше всего использовать конструктор копирования (если имеется): new JSONObject(data);

Смежные вопросы