一 概述
多线程这个概念,在很多程序员看来 ,是一个难点。因为这东西有些抽象,不好理解。刚好晨有些时间把这块单独拎出来。好好缕缕思路。顺便总结下。在java中,我们都知道有这么个线程的概念(
线程是进程的一个实体
,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源,而进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位,基于个人理解进程包含了线程【一个进程里可能有多个线程】)Android的多线程也是基于java引用过来的。所以谈论Android多线程,我们肯定先要弄懂java多线程。并且我们也要区分android线程与java多线程的异同点
二 分析与对比
在java中常见的两种方式创建线程,一种;直接继承Thread重载他的run方法,二种;实现runnabl接口并重在他的run方法,那么两种方式有何分别呢?我们通过实验证明
1 直接继承Thread实现多线程
package com.example;
public class MyThread extends Thread{
private int tick=100;//每个线程默认分配100
public MyThread(String name){
super(name);
}
@Override
public void run() {
super.run();
while(tick>0){
System.out.println(tick--+" is saled by "+Thread.currentThread().getName());
}
}
}
2 实现runable接口
package com.example;
/**
* Created by Administrator on 2017/1/13.
*/
public class MyRunnable implements Runnable {
private int tick=100;
private String name;
public MyRunnable(String name){
this.name=name;
}
@Override
public void run() {
while(tick>0){
System.out.println(tick--+" is saled by "+name);
}
}
}
java主方法
package com.example;
public class MyClass {
public static void main(String[] args){
//Thread方式
MyThread m1=new MyThread("A");
MyThread m2=new MyThread("B");
MyThread m3=new MyThread("C");
m1.start();
m2.start();
m3.start();
//runnable方式
// Thread r1=new Thread(new MyRunnable("A"));
// Thread r2=new Thread(new MyRunnable("B"));
// Thread r3=new Thread(new MyRunnable("C"));
// r1.start();
// r2.start();
// r3.start();
}
}
上面就是通过两种方式实现的多线程
该图就是上面的运行截图。从截图我们可以看到我们创建的3个线程。他们是随机运行的(而并不是哪个线程运行完了,到另一线程。每个线程相互独立互不干扰的走完自己的程序)那这两种线程孰优孰劣呢?
1.如果是继承实现多线程,不利于该线程类的扩展。而实现接口的方式确可以
2.通过runnale接口实现的多线程,可以处理同一资源从而实现资源的共享(可以说正是由于第一条原因导致继承实现的不能实现这样的功能)