对"实现Runnable"感到困惑

Mar*_*sat 2 java multithreading android runnable

你好,Java和android只有几天了.关于"实现runnable"实际上是如何工作的例子,我有点困惑:

public class DrawableSurfaceView extends SurfaceView implements Runnable {

[...]

public void resume(){
    isRunning = true;
    mThread = new Thread(this);
    mThread.start(); //start the animation
    parseParameters(); //<== Here is my problem
}

public void run() {
    while (isRunning == true){
        if (!mHolder.getSurface().isValid()) {
         continue;
        }
        Canvas canvas = mHolder.lockCanvas();
        canvas.drawARGB(255, 0, 0, 0);
        canvas.drawPath(PenPath, PenPaint);
        canvas.drawPath(CursorPath, CursorPaint);
        mHolder.unlockCanvasAndPost(canvas);
    }
}
public void parseParameters() {
  [...]
  [ The rest of my code here  modifying PenPath and CursorPath, etc ]

}
Run Code Online (Sandbox Code Playgroud)

我很尴尬地问,但我想在mThread.start()之后; 将在run方法中开始运行循环的新线程.而我得到的是仅在我的parseParameters()方法终止后执行的run方法.我想要实现的是将画布放在绘图循环线程上,并从外部修改绘图路径的参数以生成我的动画.我确信这是非常基本的,但我几个小时都无法理解这一点.文档没有帮助.

任何指针都会有很大帮助.干杯啦!

MBy*_*ByD 6

意思implements Runnable是这个类对Runnable接口中定义的方法做出反应,并且这些方法可以Thread像你一样传递给构造函数.

现在,没有立即执行新线程,并且当前线程很可能在系统切换到其他线程的上下文之前继续执行某些功能.


cHa*_*Hao 5

mThread.start();只告诉Java(和操作系统)使线程有资格运行.无法保证线程会立即启动.事实上,特别是在单核系统上,线程通常不会开始运行直到下一次操作系统跳入并切换任务/线程,所以当它实际启动时可能非常"当它感觉就像它".