线程暂停和继续实现

开启一个子线程来显示发动机上的运行时间,如果发动机暂停运行,那么这个线程也会暂停,发动机又开动的时候,线程继续开启,数据也是连贯着的;

Timer timer=new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {

}
};
timer.schedule(task,0);
 
  
这样的用法只能停止线程,继续将线程运行起来的写法我可能还没找到,可能有些细节没有注意到。
 
  
task.run();在task.cancel();运行之后,没有运行起来。于是就用了加锁的原理了。
 
   


用到加锁的原理
发动机暂停的时候,子线程就等待,子线程为DiyThread.wait();
发动机继续跑的时候,子线程就继续开启,DiyThread.notify();


前提是在主线程上开启该子线程:
DiyThread thread=new DiyThread();
private class DiyThread extends Thread {
@Override
public void run() {
while(true){
         if(发动机暂停){                    
synchronized (thread){
try {
thread.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
             }
 
   
        }
}
}
在接收到发动机又继续开动的消息后,执行:
synchronized (thread){
try {
thread.notify();
} catch (Exception e) {
e.printStackTrace();
}
}
 
  
有人说thread的锁如果没有加载就执行thread.wait()就会报错,我把synchronized (thread)中的thread换成xxxActivity.this,
昨天还不行,今天早上就行了,保险起见,还是都写成thread本身吧。
 
   
 
   

你可能感兴趣的:(android)