相关概念
- 应用程序(Application) 为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)
- 进程(Process) 运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配 一段内存空间,程序的依次动态执行,经历代码加载 -> 执行 -> 执行完毕的完整过程。
- 线程(Thread) 比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行。 线程是由程序负责管理的,而进程则是由系统进行调度的。
- 多线程(Multithreading) 并行地执行多条指令,将CPU的时间片按照调度算法,分配给各个线程,实际上是分时执行的,只是这个切换的时间很短,用户感觉是同时而已!
多线程
- 通过Thread创建
class myThread extends Thread{
@Override
public void run(){
}
}
new myThread().start();
- 通过Runnable创建
实现Runnable接口,implementation Runnable
new Thread(new Runnable(){
@Override
public void run(){
}).start();
- 通过Callable创建
Callable(接口) 内部有一个call()方法,相当于前面的run()
Future(接口) cancel()/get():取消任务/获取执行结果
FutureTask 内部实现了Runnable和Future接口
FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>(){
@Override
public Integer call() thows Exception{
}
});
new Thread(task).start();
- AsyncTask
AsyncTask是一个抽象类,一般会定义一个类继承AsyncTask然后重写相关方法
相关方法及执行流程
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0e0ce158a081794c7f1d19e3f9675ca7.jpeg)
示例
public class MyAsyncTask extends AsyncTask<Integer,Integer,String>
{
private TextView txt;
private ProgressBar pgbar;
public MyAsyncTask(TextView txt,ProgressBar pgbar)
{
super();
this.txt = txt;
this.pgbar = pgbar;
}
@Override
protected String doInBackground(Integer... params) {
DelayOperator dop = new DelayOperator();
int i = 0;
for (i = 10;i <= 100;i+=10)
{
dop.delay();
publishProgress(i);
}
return i + params[0].intValue() + "";
}
@Override
protected void onPreExecute() {
txt.setText("开始执行异步线程~");
}
@Override
protected void onProgressUpdate(Integer... values) {
int value = values[0];
pgbar.setProgress(value);
}
}
MORE
- 线程的状态
sleep(long) 休眠
wait() Object方法,使当前线程处于等待状态
notify() Object方法,唤醒等待状态的线程
CPU执行资格 排队等待
CPU执行权 正在被执行 - 同步 关键字 synchronized
把需要同步执行的任务用synchronized括起来
synchronized(this){
}