java 线程
来源:互联网 发布:淘宝安卓版5 编辑:程序博客网 时间:2024/05/03 14:01
线程概念:
java线程状态(Thread States)
1. 程序通过Thread t = new Thread(),调用t.start()启动一个线程,使该线程进入可运行(Runnable)的状态。
2. 由JVM的决定去调度(Scheduler) 在可运行状态(Runnable)下的线程,使该线程处于运行 (Running) 状态,由于JVM的调度会出现不可控性,即不是优先级高的先被调用,可能先调用,也可能后调用的的情况。运行状态(Running)下,调用礼让yield()方法,可以使线程回到可运行状态(Runnable)下,再次JVM的调度(并不依赖优先级)。
3. 线程在Running的过程中可能会遇到阻塞(Blocked)情况
①.调用join()和sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到Runnable状态,等待JVM的调度。
②.调用wait(),使该线程处于等待池(wait blocked pool),直到notify()/notifyAll(),线程被唤醒被放到锁池(lock blocked pool ),释放同步锁使线程回到可运行状态(Runnable)
③.对Running状态的线程加同步锁(Synchronized)使其进入(lock blocked pool ),同步锁被释放进入可运行状态(Runnable)。
4. 线程run()运行结束或异常退出,线程到达死亡状态(Dead)
sleep和wait的区别有:
1,类:这两个方法来自不同的类分别是Thread和Object
2,锁:最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3,域:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,异:sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
5,停:其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
notifyAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
- Java线程:什么是线程
- Java线程:线程池
- java线程--线程退出
- JAVA-线程/线程锁
- Java线程:什么是线程
- Java线程:线程中断
- Java线程:线程状态
- Java线程: 线程调度
- Java线程:线程交互
- java--线程--线程池
- java 线程
- Java线程
- java线程
- java线程
- Java线程
- Java线程
- java线程
- JAVA 线程
- 微信公众平台开发上传下载多媒体文件
- iOS开发网络篇—数据安全
- Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单
- (hdu 简单题 128道)Lowest Bit(求一个数的二进制的最后一个非零位对应的十进制数)
- Android判断用户2G/3G/4G移动数据网络
- java 线程
- 面向对象和面向过程 不同之处
- NSURL absolute elativeToURL
- Android 模拟器无法连接网络?
- 尹成老师视频 中代码(关于递归(腾讯面试题的50台阶))
- ie下jpg转base64编码
- Dynamic Lookup 概念
- 轻松使用线程: 减少争用
- Android 打造形形色色的进度条 实现可以如此简单