아래 Runable을 Thread로 변경할려고하는데 이런 에러가 나네요 

W/System.err( 7003): java.lang.IllegalThreadStateException: Thread already started.

W/System.err( 7003):    at java.lang.Thread.start(Thread.java:1227)

....

기능은 간단합니다. 10밀리초마다 초를 찍는건데 Thread로 구성이 잘안되네요.

Stop,Start한 StopWatch를 구성하는것거등요


public class Main extends Activity {

    Button btnReset = null;

    Button btnRun = null;

    Handler mhand = null;

    Runnable mUpdateTimeTask = null;

    

/** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        btnReset = (Button) findViewById(R.id.btn_reset);

        btnRun = (Button) findViewById(R.id.btn_run);

        

        btnReset.setOnClickListener(btnClick);

        btnRun.setOnClickListener(btnClick);


        mhand = new Handler();

        mUpdateTimeTask = new Runnable() {

public void run() {

long l = System.currentTimeMillis();

Log.d("DEV","Log : "+l);

mhand.postDelayed(mUpdateTimeTask, 10);

}

        };

    }

      

    Button.OnClickListener btnClick = new View.OnClickListener() {

    public void onClick(View v){

   

    if( v.getId() == R.id.btn_run ){

mhand.removeCallbacks(mUpdateTimeTask);

mhand.postDelayed(mUpdateTimeTask, 100);

    }else if( v.getId() == R.id.btn_reset ){

    mhand.removeCallbacks(mUpdateTimeTask);

     }


    }

    };

}




**Thread로 변경******************************************************


public class Main extends Activity {

    Button btnReset = null;

    Button btnRun = null;

    

    BackThread proc = null;

    

/** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        btnReset = (Button) findViewById(R.id.btn_reset);

        btnRun = (Button) findViewById(R.id.btn_run);

        

        btnReset.setOnClickListener(btnClick);

        btnRun.setOnClickListener(btnClick);

        

        proc = new BackThread();

    }

    

    

    Button.OnClickListener btnClick = new View.OnClickListener() {

    public void onClick(View v){

   

    if( v.getId() == R.id.btn_run ){

     mHandler.sendEmptyMessage(TIME_RUN);

    }else if( v.getId() == R.id.btn_reset ){

     mHandler.sendEmptyMessage(TIME_STOP);

     }


    }

    };

   

    private final int TIME_RUN = 100;

    private final int TIME_STOP = 200;

    Handler mHandler = new Handler(){

    public void handleMessage(Message msg){

    if( msg.what ==  TIME_RUN ){

    try{

      proc.join();

      proc.start();

    }catch(Exception e){

    e.printStackTrace();

    }

   

    }else if( msg.what ==  TIME_STOP ){

    mHandler.removeMessages(TIME_RUN);

    try{

      //proc.join();

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    }

};

    class BackThread extends Thread{

    public void run(){

    long l = System.currentTimeMillis();

    Log.d("DEV","Log : "+l);

    mHandler.sendEmptyMessageAtTime(TIME_RUN,10);

   

    }

    }

}