您的位置:首页 > 移动开发 > Android开发

多线程:创建Thread为什么要调用start启动,而不能直接调用run方法

2017-10-05 11:47 741 查看
最近在学习Android Service时遇到这样多线程问题。



start()方法启动线程后,整个线程处于就绪状态,等待虚拟机调度, 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。期间虚拟机是分时间片轮番调用各个线程体的。

run()方法启动是当作普通方法的方式调用,这里虚拟机不会线程调度,虚拟机会执行这个方法直到结束后自动退出。



参考进程、线程调度,javaThread生命周期。


package com.example.wangchuncheng.myservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class MyService extends Service {

private boolean running = false;
private String data  = "这是默认信息";

public MyService() {
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
data = intent.getStringExtra("data");
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onCreate() {
super.onCreate();
running = true;

new Thread(){
@Override
public void run() {
super.run();
while(running){
System.out.println(data);
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
//这里使用run的话,开始服务后会卡死,导致程序无响应
}

@Override
public void onDestroy() {
super.onDestroy();
running = false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐