安卓线程

关于线程和进程

 

1.进程是资源管理的最小单位 线程是程序执行的最小单位

 

2.每个进程都有自己的数据段 代码段 和堆栈段 线程 通常叫做 轻型的进程 它包含独立的栈和CPU寄存状态 每个线程共享其所附属进程的所有资源 包含打开的文件 内存页面 信号标识及分配内存等。

 

3.线程比进程花费更小的CPU资源

 

4.在操作系统设计上 从进程演化出线程 最主要的目的就是更好的支持多处理器 并且减少进程上下文切换的开销 线程的上下文切换比进程快很多

 

5.进程和线程的关系 线程属于进程 线程运行在进程空间内 统一进程所产生的线程共享同一内存控件 当进程退出所产生的线程会被强制退出并且清楚 一个进程至少需要一个线程来作为他的指令执行体 进程管理着资源 比如CPU 内存 文件 等等,而将线程分配到某个CPU上运行

 

6.线程按照其调度这可以分为用户级线程和内核级线程两种

用户级线程:主要解决的是上下文切花你的问题 其调度过程由用户决定(开发者决定)

内核级线程:通过内核调度实现

 

7.用户级线程要绑定内核级线程使用

 

8.默认情况下不能保证新线程和调用线程执00行顺讯

 

9.每个进程内部的不同线程都有自己的唯一标识(ID) 线程标识只在它所属的进程环境中有效

 

10.Sleep线程告诉系统 自己在一段时间内不被调度

 

线程中各种唤醒 等待 睡眠方法之间的区别:

1.notify()和notifyAll()方法的区别:

notifyAll是所有在当前对象上等待被notify的线程都退出wait状态 变成等待该对象上的锁 一旦该对象被解锁 他们就会去竞争 。 但是notify仅仅只是选择一个在wait状态的线程进行通知 并或者该对象上的锁 而且并不会惊动同样在等待被该对象notify的线程,当第一个线程运行完毕后释放对象上的锁 此时如果该对象没有再次使用notify语句 则即便该对象已经空闲 其他wat状态等待的线程由于没有得到该对象的通知 继续处在wait状态 直到这个对象发出一个 notify或notifyAll ,线程在wait状态时等待的是被notify和notifyAll 而不是锁

 

2.sleep() yield() 和 wait() 方法之间的区别

①:sleep()使当前线程暂停一段时间 让其他线程有机会继续执行,但是并不释放对象锁。也就是如果有Synchronized同步块 其他线程仍然不能访问共享数据 注意该方法要捕获异常 ,如果两个线程同时执行 没有Synchronized的情况下 一个线程优先级为MAX 另一个为MIN 如果没有Sleep()方法,那么只有当优先级高的执行完 优先级低的才能执行 但是档优先级高的线程Sleep(5000)之后 低优先级的线程就有机会执行了。

 

②:wait()方法使当前线程暂停执行并释放对象锁标志 让其他线程可以进入Synchronized数据块 当前线程被放入对象等待池中 只有 锁标志等待池中的线程能够获取锁标志 如果锁标志等待池中没有线程 则notify()不齐作用

 

③:yield、可以使当前线程放弃当前分的CPU时间 但是并不会使线程阻塞 即线程仍处理可执行状态 随意可能再次分的CPU时间 调用yieid()的效果等价于调度程序认为该线程已经执行足够的时间而转到另一个线程 yieid()只是使当前线程重新回到可执行状态 所以执行yieid() 的线程有可能在进入可执行状态后又马上被执行 sleep()可以使优先级低的线程获取先执行的机会 但是同样也可以让同级优先和高优先级的线程有执行的机会 yieid()只能使同优先级的线程有执行的机会

 

3.suspend() 和 resume() 方法之间的区别

suspend() 和 resume() 两个方法配套使用 suspend()使得线程进入阻塞状态 必须其对象的resume()被调用 才能使得线程重新进入可执行状态 但是当这两个方法被用在等待另一个线程产生的结果情形 当另一个线程出现结果调用resume让其恢复

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值