Java Android Threads,同一个线程工作两次

时间:2014-04-04 19:08:02

标签: java android

在我的应用程序中,我有一个计时器和停止/启动按钮。定时器适用于线程 当我点击按钮时,我的计时器开始工作。当我点击停止并开始它似乎我的线程作为2个并行线程。 如何停止第一个线程并创建第二个? 这是代码

timer = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        final boolean cont = mSharedPreferences.getBoolean("continuesMode", false);
                        final boolean statemant = !stopedAlgo && !mUserStop;
                        if(!statemant){
                            timerMinutes = 0;
                            timerHours = 0;
                        }
                        while(statemant){
                            time="";
                            if(timerMinutes>=60){
                                    timerMinutes = 0;
                                    timerHours++;
                            }

                            if(timerHours<10)
                                time = "0" + String.valueOf(timerHours)+":";
                            else
                                time =  String.valueOf(timerHours)+":";
                            if(timerMinutes<10)
                                time += "0" + String.valueOf(timerMinutes);
                            else
                                time +=  String.valueOf(timerMinutes);
                            HeadSense.this.runOnUiThread(new Runnable(){
                                public void run(){
                                    boolean state = mContinuousMode && !stopedAlgo && !mUserStop ;
                                    if(!stopedAlgo && cont){
                                        mTfsValue.setText(time);
                                        timerMinutes++;
                                    }
                                    else{
                                        timerMinutes = 0;
                                        timerHours = 0;
                                    }
                                }

                            });

                            try {
                                Thread.sleep(1*1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }


                    }
                });

                    timer.start();

2 个答案:

答案 0 :(得分:1)

据我所知,你的第一个主题(或第二个)将永远不会因为以下行而停止:

  final boolean statemant = !stopedAlgo && !mUserStop;

这是最终的,只会被评估一次而且永远不会改变。如果在您创建true时它评估为Thread,它将保持为真并继续运行。

答案 1 :(得分:0)

您需要在此处将布尔值statemant声明为volatile。这样做是为了向编译器提示某些优化不能被采用,因为这个变量是由外部线程修改的。

此外,您会对此感兴趣 - How to stop a java thread gracefully?