主线程调用另一个线程的方法 - 这到底发生了什么?

时间:2013-03-07 22:51:50

标签: java android multithreading

当主用户线程在另一个线程中调用一系列方法时,我有点困惑

在主线程中:

otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();
otherThread.callMethod();

另一个线程中的callMethod正在写入和读取这样的套接字:

mmOutStream.write(buffer);
mmOutStream.flush();
while (!finished) {
   if (mmInStream.available() > 0)
   if ((char) (c = (byte) mmInStream.read()) != 'x') {
      responseBuffer[responseBufferLen++] = c;
     } else {
      finished = true;
    }
}

这显然是一种阻塞方案 - 但是在按顺序调用这些方法时,主用户线程不会被阻止。

我的意思是阻止所有按钮仍然反应,用户可以毫不拖延地与屏幕交互。 怎么会这样?

2 个答案:

答案 0 :(得分:6)

不会在线程上调用方法。它们被称为对象(或类,对于静态方法)。对象可以是Thread类型,但是对类型为Thread的对象调用方法与在任何其他类型的对象上调用方法完全相同。该方法仍由当前线程执行。

答案 1 :(得分:2)

线程没有方法。类有方法和实例。代码通过对象调用实例方法。它都在当前线程中执行。对象是一个线程的事实没有区别。