Java跨线程方法调用的疑惑

ngdik 2014年12月26日提问
0

假定有一个继承自Thread的类,run方法为

while(1)
{
    ;
}

这样一个死循环。
而此类有一个方法foo()并涉及到Thread类中私有变量,请问在此线程外调用此类的Foo方法会打断run方法的循环吗?在此线程外调用此线程的方法会造成同步问题吗?

2个回答

0

已采纳

Q:请问在此线程外调用此类的Foo方法会打断run方法的循环吗?
A:不会,因为run是由新的线程唤起的,与你调用foo方法的线程属于平行线程

Q:在此线程外调用此线程的方法会造成同步问题吗?
A:分两种情况:

  1. 线程外调用此线程对象的方法foo1,foo1操作了对象bar,而线程的run方法也操作了对象bar,那么相当于两个线程都在并行操作bar,这时是有同步问题的,bar的最终状态是不确定的
  2. foo1没有操作与run方法相同的对象,不会有同步问题

总的来说,你在一个线程直接调用另一个线程对象的任何方法,就是一个普通的函数调用,这个调用过程是同步的,与这个对象是不是一个线程对象,没有关系。

0

我在想你怎么涉及到Thread变量的,另外都私有了,你还能涉及到?
另外你这while循环都没有退出的代码,怎么调用都打断不了

撰写答案