什么是线程?
线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。
什么是多线程?
在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程线程的基本用法
1.继承Thread
- 定义一个线程只需要新建一个类来继承Thread然后重写父类的run()方法,并在里面写耗时逻辑就可以了。如下:
class MyThread extends Thread{
@Override
public void run(){
//具体的耗时逻辑
}
}
- 启动线程 :new出新建类MyThread 的实例,然后调用它的start() 方法,这样run() 方法中的代码就会在子线程当中运行。如下:
new MyThread().start();
2.实现Runnable接口
- 使用继承的方式耦合性会有点高,更多的时候我们都是会选择使用实现Runnable接口的方式来定义一个线程。如下:
class MyThread implements Runnable {
@Override
public void run() {
//具体的耗时操作
}
}
- 启动线程:
MyThread myThread = new MyThread();
new Thread(myThread).start();
3.匿名类方式
new Thread(new Runnable(){
@Override
public void run() {
//具体的耗时操作
}
}).start();
在子线程中更新UI
方法一:使用Handler。
- 在主线程中定义Handler
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
//完成主界面更新,拿到数据
String data = (String)msg.obj;
updateWeather();
textView.setText(data);
break;
default:
break;
}
}
};
- 子线程发消息,通知Handler更新UI.
private void updateWeather() {
new Thread(new Runnable(){
@Override
public void run() {
//耗时操作,完成之后发送消息给Handler,完成UI更新;
mHandler.sendEmptyMessage(0);
//需要数据传递,用下面方法;
Message msg =new Message();
msg.obj = "数据";//可以是基本类型,可以是对象,可以是List、map等;
mHandler.sendMessage(msg);
}
}).start();
}
方法二:用Activity对象的runOnUiThread方法
new Thread() {
public void run() {
//这儿是耗时操作,完成之后更新UI;
runOnUiThread(new Runnable(){
@Override
public void run() {
//更新UI
imageView.setImageBitmap(bitmap);
}
});
}
}.start();
Activity activity = (Activity) imageView.getContext();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
总结:
虽然在暑假的时候有粗略的看过这个知识点,但是印象不是很深刻,现在花一点时间继续学习这个知识点后发现,多线程的编程对我来说还是比较复杂的,我会在今后的学习中再继续学习这个知识点。
网友评论