1 项目启动时开始运行线程
@Component
public class GetRunApInfoTask implements CommandLineRunner {
@Resource
private WirelessNetworkService wirelessNetworkService;
@Override
public void run(String... args) {
ThreadSuspend instance = ThreadSuspend.getInstance();
instance.startThread(wirelessNetworkService);
}
}
2 控制线程运行与等待
public class ThreadSuspend {
public static ThreadSuspend instance;
public static synchronized ThreadSuspend getInstance(){
if(instance == null){
instance = new ThreadSuspend();
}
return instance;
}
public void startThread(WirelessNetworkService wirelessNetworkService){
MyThread myThread = MyThread.getInstance();
myThread.setWirelessNetworkService(wirelessNetworkService);
myThread.run();
}
public void setStatus(Boolean flag){
MyThread myThread = MyThread.getInstance();
if(flag){// true 暂停
myThread.toSuspend();
}else {// 恢复
myThread.toResume();
}
}
}
3 线程
public class MyThread implements Runnable {
private static int i;
public static MyThread instance;
public static synchronized MyThread getInstance() {
if (instance == null) {
instance = new MyThread();
}
return instance;
}
private WirelessNetworkService wirelessNetworkService;
public void setWirelessNetworkService(WirelessNetworkService wirelessNetworkService) {
this.wirelessNetworkService = wirelessNetworkService;
}
private boolean suspend = false;
public synchronized void toSuspend() {
suspend = true;
}
public synchronized void toResume() {
notify();//当前等待的线程继续执行
suspend = false;
}
@Override
public void run() {
while (true) {
synchronized (this) {
while (suspend) {
try {
wait();//让线程进入等待状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//具体业务 从 第三方接口读数据并保存
wirelessNetworkService.saveApInfoOnRun();
try {Thread.sleep(3000);} catch (InterruptedException e) {throw new RuntimeException(e);}
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("第几次: " + ++i);
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
}
}
4 控制线程运行操作
public R setApRunningStatus(Boolean operate) {
ThreadSuspend instance = ThreadSuspend.getInstance();
if (!operate) {
// true 暂停
instance.setStatus(true);
} else {
// true 唤醒
instance.setStatus(false);
}
return R.ok("设置成功");
}
4 效果演示
1 启动项目开始读取数据
2 调用方法停止
3 恢复运行