Как передать все поля одного объекта-потока в другой объект-поток?
Как передать все поля одного объекта-потока в другой объект-поток? К примеру, хочу, использовать методы (или поля) первого объекта из другого объекта-потока.
Для такого случая, мы передадим ссылку на первый объект во второй объект. Для простоты, мы передадим эту ссылку (передается, как this) в конструктор второго объекта. Там мы присвоим локальному полю эту ссылку (new не используем). Тип объекта мы указываем явно и сразу. Однако можно этого сразу не недать, а в последствии привести к нужному типу (от главного мета объекта Object). В примере - 2 класса, реализующие вычислительные потоки. Оба работают и пополняют один и тот же вектор. Заведенный в первом классе. Затем из первого класса выводится его содержимое.
package test;
public class Tr1 extends Thread implements Runnable {
public java.util.Vector tVector;
/**
* Tr1 constructor comment.
*/
public Tr1() {
super();
makeNewVector();
}
/**
* Starts the application.
* @param args an array of command-line arguments
*/
public static void main(java.lang.String[] args) {
// Insert code to start the application here.
Tr1 tTr1=new Tr1();
tTr1.makeNewVector();
tTr1.start();
}
/**
* Insert the method's description here.
* Creation date: (08.06.01 9:42:22)
*/
private void makeNewVector() {
tVector = new java.util.Vector();
Tr2 tTr2=new Tr2(this);
tTr2.start();
}
/**
* run method comment.
*/
public void run() {
int count;
count = 1;
while (count < 40) {
try {
tVector.addElement("Главный " + count);
count++;
this.sleep(100);
}
catch (InterruptedException e) {
System.out.println("Обломс. Меня прервали :-( Искренне ваш - главный поток.");
}
}
int tempCount;
for (tempCount = 1; tempCount < tVector.size() ; tempCount++) {
System.out.println("Главный поток: " + tVector.elementAt(tempCount));
}
}
}
package test;
public class Tr2 extends Thread implements Runnable {
public Tr1 tObject;
/**
* Tr2 constructor comment.
*/
public Tr2() {
super();
}
public Tr2(Tr1 t2Object) {
tObject = t2Object;
}
/**
* Starts the application.
* @param args an array of command-line arguments
*/
public static void main(java.lang.String[] args) {
// Insert code to start the application here.
}
/**
* run method comment.
*/
public void run() {
int count;
count = 0;
while (count<26;) {
try {
count++;
this.sleep(80);
tObject.tVector.addElement("Второй."+count);
}
catch (InterruptedException e) {
System.out.println("Меня обломили. Второй поток");
}
}
}
}