多线程的使用
//规范用法
private Handler handler = new Handler();
private void delayDestroy() {
handler.postDelayed(runnable, 2000);
}
public Runnable runnable = new Runnable() {
@Override
public void run() {
finish();
}
};
//关闭此定时器
handler.removeCallbacks(runnable);
斜体样式继承Thread类 和 实现Runnable接口
继承Thread类
// 1:创建线程类 (继承自Thread类)
class MyThread extends Thread{
// 2:复写run()
@Override
public void run(){
... // 定义的线程需要进行的操作
}
}
// 3:创建线程对象,即 实例化线程类
//MyThread myThread = new MyThread();
MyThread myThread = new MyThread(“线程名称”);
// 4:通过线程对象控制线程的状态,如 运行、睡眠、挂起 / 停止
// 调用 start()开启线程
myThread.start();
//使用匿名内部类
new Thread("线程名称") {
// 复写run()
@Override
public void run() {
//定义的线程需要进行的操作
// 通过 线程对象 控制线程的状态,如 运行、睡眠 、 停止 如Thread.sleep();
}.start();
继承Thread类实现多线程的优缺点:
优点:使用简单
缺点:
存在局限性,必须要继承Thread类,java是单继承的,继承了一个没法在继承另一个;
不合适资源之间的共享:一个线程就是一个实例对象,他们之间是相互独立的
消耗资源;
实现Runnable接口
// 创建线程辅助类,实现Runnable接口
class MyThread implements Runnable{
....
@Override
// 复写run()
public void run(){
//线程操作
}
}
// 创建线程辅助对象,即 实例化 线程辅助类
MyThread mThread=new MyThread();
/* 创建线程对象,即 实例化线程类;线程类 = Thread类;
创建时通过Thread类的构造函数传入线程辅助类对象
原因:Runnable接口并没有任何对线程的支持,我们必须创建线程类(Thread类)的实例,从Thread类的一个实例内部运行*/
Thread td=new Thread(mThread);
// 通过 线程对象 控制线程的状态,如 运行、睡眠、挂起 / 停止
// 当调用start()方法时,线程对象会自动回调线程辅助类对象的run(),从而实现线程操作
td.start();
//匿名内部类
Runnable mt = new Runnable() {
// 复写run()
@Override
public void run() {
//线程操作
}
};
// 创建线程对象,即 实例化线程类;线程类 = Thread类;
Thread mt1 = new Thread(mt, "线程1");
// 通过 线程对象 控制线程的状态,如 运行、睡眠、挂起 / 停止
mt1.start();
参考文章:Carson_Ho