为什么线程只能启动一次?

时间:2017-04-30 12:04:10

标签: android multithreading android-thread

对于每个Android-dummy,我也会遇到FATAL EXCEPTION

java.lang.IllegalThreadStateException: Thread already started

滚动论坛和问题,我看到线程无法启动两次。我见过这样的答案:

  

“不止一次启动线程并不是一个好主意。”

     

“线程只能被调用一次。”

但是没有人说为什么线程只能被调用一次。对我来说听起来很奇怪,有一个Android功能只能被召唤一次。

为什么只能调用一次线程?

我正在开发一个应用程序,每次点击屏幕时我都要调用动画。我认为Thread可能是最适合我的工具。我错了吗?

更新

也许问题不明确。

我不是在问为什么线程在活着时无法重启。

我在问为什么我已经运行但现在已完成的线程(因此它不存在)不能再次调用。

这是我的代码完全简化。线程在onCreate第一次调用,第二次在onClick调用,因此当我点击图像时。 在第二次调用时,我可以从Android Monitor看到线程不是活着的,尽管它还没有启动。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        chiamaDatabase();
        RESET.start();

        ImageView image = (ImageView) findViewById(R.id.imageView2);
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!RESET.isAlive()) {
                    RESET.start();
                }
            }
        });
    }

    public Thread RESET = new Thread() {
        public void run() {
            final ImageView image = (ImageView) findViewById(R.id.imageView2);
            Random random = new Random();
            int n = random.nextInt(2);
            image.setX(320+n);
            image.setY(400+n);
        }
    };

1 个答案:

答案 0 :(得分:0)

你应该看一下Thread是什么:https://en.wikipedia.org/wiki/Thread_(computing)

启动已经运行的线程是没有意义的,因此,当有人试图启动已经运行的线程时,语言必须选择做什么:

  1. 忽略命令
  2. 发生错误
  3. Java选择了第二个,我认为这是最好的事情。

    如果你真的必须再次启动线程,那么你将无法使用Java。查看此链接,描述Java中线程的生命周期:http://www.roseindia.net/java/thread/life-cycle-of-threads.shtml

    您还可以参考其他StackOverflow线程:How can a dead thread be restarted?