您的位置:首页 > 移动开发 > Android开发

关于线程一些知识点和总结

2016-08-16 19:39 399 查看
今天刚刚学习到,人生需要积累,于是把自己每天的学习到的都记录起来,相信有一天会成为自己宝贵的财富,废话不多说 直接贴知识点:

1.何为进程

在Android中的App通常会运行在一个独立的进程中,通常会在正在运行的程序理解为一个进程

每一个进程都有一个独立的内存空间,不能共存内存空间,对于一个多操作的系统,进程是可以并发的运行的

2.何为线程

线程是进程中的最小单位,是一个顺序执行的流,在同一个进程中线程可以共享同一块内存空间

线程是是可以并发执行的

3.为何并发?

a)宏观(并行)

b)微观(串行 顺序 会轮流执行)

4。多线程的应用优点和劣势

优势:

a)多线程的运用可以提高用户的体验

劣势:

a)多线程的运用 会使编码难度加大,及调试的难度

5.Android中的线程创建和相关状态

相关状态:

1.创建状态(new Thread)

2.就绪状态(start 。。。。)

3.运行状态 (run )

4.阻塞状态 (sleep)

5.死亡状态 (run方法结束完)

相关方法:

1.start 启动线程,让线程进入就绪状态

2.run 运行线程

3.sleep 暂停状态,让出cup

4.join 让调用此方法的 线程 优先执行

5.setDeamon 设置为守护线程,当没有其他线程是,会自动终止执行

6.interruput 唤醒正在睡眠的线程

7.isalive 判断线程是否终止

8.getName 获取线程名

9.currentThread 获取当前线程

10.setpriority 设置线程优先级

6.Android 线程同步

线程同步是多个进程对共享数据集上的互斥和协作 ,保证数据的安全,和业务合理的一种实现

1)互斥是让对个线程判对进行

a)同步代码块 synchronized 关键字

同步的方法:

静态:static synchronize method()

非静态: synchronize method方法

下面是一个关于消费者和生产者案例:

package day14;
class Container{
private Object[] array;
/**记录有效元素个数(放的数据的个数)*/
private int size;
public Container(int cap) {
array=new Object[cap];
}
/**放数据*/
public synchronized void put(Object obj){
//1.判定容器是否已满,满了则等待.
while(array.length==size)
try{this.wait();}catch(Exception e){}
//2.没满则放数据
array[size]=obj;//addLast
//3.修改有效元素个数
size++;
//4.通知消费者取数据
this.notifyAll();
}
/**取数据*/
public synchronized Object take(){
//1.判定容器是否为空,空则等待
while(size==0)
try{this.wait();}catch(Exception e){}
//2.容器不为空,则取数据
Object obj=array[0];//removeFirst
//3.移动元素
if(size>1){
System.arraycopy(array, 1, array, 0, size-1);
}
//4.修改有效元素个数
size--;
//5.通知生产者继续放数据(通知具备相同锁对象,并且处于等待状态的线程)
this.notifyAll();//此时会释放锁吗?不会释放
return obj;
}
}
/**生产者*/
class Producer extends Thread{
private Container container;
public Producer(Container container) {
this.container=container;
}
@Override
public void run() {
int i=1;
while(true){
container.put(i++);
//try{sleep(500);}catch(Exception e){}
}
}
}
/**消费者*/
class Consumer extends Thread{
private Container container;
public Consumer(Container container) {
this.container=container;
}
@Override
public void run() {
while(true){
Object obj=container.take();
System.out.println(obj);
//try{sleep(500);}catch(Exception e){}
}
}
}

public class ThreadCommunication01 {

public static void main(String[] args) {
//容器对象
Container c=new Container(5);
//生产者线程对象
Producer pro=new Producer(c);
//消费者线程对象
Consumer con=new Consumer(c);

pro.start();
con.start();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息