如何从不同的java线程引用方法
我试图从线程b引用线程a,我本质上想在b类/线程中使用getN()方法,非常感谢您的帮助如何从不同的java线程引用方法,java,multithreading,concurrency,java.util.concurrent,Java,Multithreading,Concurrency,Java.util.concurrent,我试图从线程b引用线程a,我本质上想在b类/线程中使用getN()方法,非常感谢您的帮助 //// class help { ///// main { Thread a = new Thread(new A()); Thread b = new Thread(new B(a)); } } class A implements Runnable { private static int tally; public void run
//// class help {
///// main {
Thread a = new Thread(new A());
Thread b = new Thread(new B(a));
}
}
class A implements Runnable {
private static int tally;
public void run() {
}
public int getN() {
tally = 6;
return tally;
}
}
class B implements Runnable {
private A aref;
public B(A ref){
aref=ref;
}
public void run() {
aref.getN();
}
}
//////////////////////////////////////////////////////////////////
/////////////////////////为了构造类B的对象,需要引用类a的对象,而不是类Thread的对象。因此,这应该是可行的:
A objA = new A();
Thread a = new Thread(objA);
Thread b = new Thread(new B(objA));
为什么
A
ARunnable
,当它不执行任何操作时(它的run
方法不包含任何操作)会被放到线程上?我认为这“只是一个例子”,但如果是的话,这是一个没有任何意义的坏例子。你希望aref.getN()
在线程a上执行吗?@CannedMoose是的,我基本上希望我的B线程能够使用getN()方法,这样我就可以达到计数value@Michael这只是一个例子,但是谢谢你的帮助response@ghost如果只读取另一个线程的值,则应该像前面提到的其他线程一样使用某种同步,至少是AtomicInteger
或类似的同步。如果要进行更长时间的计算,则需要注意对getN()
的调用是由线程B的上下文执行的,而不是像您预期的那样在A上执行。干杯,那么我会使用B.start();System.out.println(b.getValue());但是它说我找不到值?@ghostb
是线程的一个实例。它没有getValue
方法(类也没有A
或B
方法)@javaguy-ivan-milosavljevi当我在做B.start()时,getN()方法似乎不起作用。干杯,在某个地方搞砸了,正试图让我的第二个线程从第一个线程读取数字。你说什么“似乎不起作用”?如果将类B
中方法run()
的实现更改为System.out.println(aref.getN());
它应该打印6
。