一.主要思想
1.基础使用
- 继承Thread类
- 实现Runnable接口
- Handler
2.复合使用
- AsyncTask
- HandlerThread
- IntentService
二.通过实训案列来了解
(1)创建安卓项目
(2)主布局资源文件activity_main.xml
(3)主界面类MainActivity.java
package net.yuanjing.multithreading;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
// 步骤1:自定义Handler子类(继承Handler类) & 复写handleMessage()方法
class mHandler extends Handler {
// 通过复写handlerMessage() 从而确定更新UI的操作
@Override
public void handleMessage(Message msg) {
int ticket = (int) msg.obj;
// 需执行的UI操作
switch (msg.what) {
case 2:
tvMsg.setText("票仓剩下的票数:" + ticket);
}
}
}
// 步骤2:在主线程中创建Handler实例
private Handler mhandler = new mHandler();
private TextView tvMsg;
private Button btnStart;
private int count = 10;//10张票
//1.多线程第一步定义子线程
//1.1继承Thread父类
class MyThread1 extends Thread {
String name;
private Handler mHandler;
public MyThread1(String name,Handler mHandler) {
this.name = name;
this.mHandler = mHandler;
}
@Override
public void run() {
super.run();
//核心代码放这里
while (count > 0) {
Log.d("sky.Yuan", name + "购得了一张票");
count--;
// 步骤3:创建所需的消息对象
Message msg = Message.obtain(); // 实例化消息对象
msg.what = 2; // 消息标识
msg.obj = count; // 消息内容存放
// 步骤4:在工作线程中 通过Handler发送消息到消息队列中
// 可通过sendMessage() / post()
// 多线程可采用AsyncTask、继承Thread类、实现Runnable
mhandler.sendMessage(msg);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//1.2 实现Runnable接口
class MyThread2 implements Runnable {
String name;
public MyThread2(String name) {
this.name = name;
}
//2.多线程步骤二重写run方法
@Override
public void run() {
//核心代码放这里
while (count > 0) {
Log.d("sky.Yuan", name + "购得了一张票");
count--;
// 步骤3:创建所需的消息对象
Message msg = Message.obtain(); // 实例化消息对象
msg.what = 2; // 消息标识
msg.obj = count; // 消息内容存放
// 步骤4:在工作线程中 通过Handler发送消息到消息队列中
// 可通过sendMessage() / post()
// 多线程可采用AsyncTask、继承Thread类、实现Runnable
mhandler.sendMessage(msg);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//3.多线程步骤三定义和初始化线程
private MyThread1 myThread1;
private MyThread2 myThread2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
tvMsg = findViewById(R.id.tv_msg);
btnStart = findViewById(R.id.btn_start);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//3.多线程步骤三定义和初始化线程
myThread1 = new MyThread1("张三",mhandler);
myThread2 = new MyThread2("李四");
//4.多线程步骤四启动线程
myThread1.start();
new Thread(myThread2).start();
}
});
}
}
(4)看一哈运行的效果