多线程基本概念解析
来源:互联网 发布:mac 修改计算机名称 编辑:程序博客网 时间:2024/06/06 02:59
1、多线程的状态
线程一共有8种状态,听我慢慢道来
1、new状态 :当一个线程实例出来之后(调用start方法之前),改线程并未运行
2、Runnable(就绪状态):调用start之后,就进入就绪状态,cpu随机将资源分配给就绪状态的线程(一般会有很多就绪状态线程在焦急等着cpu的资源,java是属于抢占式的时间片分配,这样就没有哪个线程可以长期独占cpu资源),让其运行。(资源只有1个,及其珍贵啊)
3、Runing 运行状态、大家也知道,单核cup每次只能执行一条线程的一条指令,所以宏观上的并发,实际是微观上的串行
4、Blocked状态: 阻塞状态,当一个线程运行时,碰到了突发事件,如 io阻塞,或者须要等待其他资源完成 后才能继续,该线程就处于阻塞状态,此时,如果有其他线程,其他线程也照样正常运行。
5、Look pool 状态:当一个线程要访问一个对象方法时,发现这个对象已经被锁(Synchronized,lock),因此就进入Loo pool状态,当发现解锁时,look pool状态的线程立刻回到Runnable状态。
6、wait pool状态:当一个线程调用了wait的时候,就进入wait pool(同时释放它所占领的锁),当被其他线程调用notify时,被唤醒,进入Lock pool状态。
7、dead状态:死亡状态,正常结束(run方法执行完)或者异常退出。
2、sleep()、wait()notify()、stop()、synchronized()、join()、lock()、interrupt()、yeild()(概述,记住是概述,详情还得自己去找)
1、sleep():这个方法大家用得比较多,就是一个线程暂停睡眠多少秒,然后接着执行。调用完后它进入Blocked状态。
2、wait():与sleep()相提并论的方法就是wait()方法了,他们的区别网上很多,我总结下A、sleep自己醒来进入Runnable状态,wait必须等别人来呼唤他(notify),然后才进入相应下一个状态B、如果一个线程拿到一个对象锁,他调用sleep方法后,锁是不会被释放的,而调用wait时,对象锁是会被释放的。这个是他们2个中最主要的差别。
3、synchronized():这个就是同步锁啦,用法很简单,但是知识点很多,自己理解百度去。
4、lock():这个也是锁的一种方式,必须运行在try 语句块,锁的关闭必须在finally语句块中,jdk5的新特性,经常拿来和synchronized比,知识点很多,自己百度理解去。
5、stop():停止一个线程的方法,已不推荐使用。如何停止一个线程?这又是一个知识点,请百度
6:interrupt():看名字就知道,是中断一个线程。其他中断方法是不推荐的,只有这个才是王道,当然中断也要看中断线程处于什么状态,当改线程正常运行时,外部线程调用该线程的中断方法,改线程会有一个中断状态,相当于一个boolean变量,变成false,该线程执行业务的时候,就会判断该状态,其实这个中断方法我们可以自己设置一个boolean来替代他。另外一个场景就是当一个线程调用了sleep wait join 的时候,你再调用该线程的interrupt方法,那么就直接中断了,中断的时候抛出个异常,详情见http://www.iteye.com/topic/429005
7、join():在A线程运行的时候,调用另外一个线程(用B称呼吧)的join方法,那么,他自己就进入阻塞状态,要等到B的run方法运行完,A才接着往下运行。挺好理解的,自己写个程序就理解透了。
8、yeild();这个方法不是很好理解,实验也不知道如何做,就是说 当一个线程运行,让同等优先权的线程运行。如果没有同等优先权的线程,那么Yield()方法将不会起作用。(网上摘抄的,暂且急着吧)
零散的点:
synchonized可以是锁一个方法,也可以是锁一个语句块,但是无论何种方式,都是对一个对象加锁。另外一种加锁就是对Class对象加锁,这又是另外一种级别了、如果你对一个类的静态方法加锁,那么就是锁的改类的Class对象了。
这是一张线程状态图:
- 多线程基本概念解析
- 多线程基本概念
- 多线程基本概念
- 多线程基本概念
- 多线程基本概念
- 多线程:基本概念
- 多线程基本概念
- 多线程基本概念
- Windows多线程基本概念
- Win32多线程程序设计基本概念
- 多线程设计基本概念
- 多线程中的基本概念
- Linux 多线程,基本概念
- Linux多线程,基本概念
- 1、Linux多线程,基本概念
- java多线程基本概念
- Linux多线程,基本概念
- linux多线程----基本概念
- RIA Services for Silverlight 4 使用随笔
- CSS 文本框只显示下划线
- 实习日记020(8月12日)
- 位图按钮
- MMORPG游戏服务器 - 技能系统设计【下篇】
- 多线程基本概念解析
- 软件项目管理中的十个误区
- 内存泄漏检测
- 找不到控件的原因
- mysql连接字段与字符串的语句
- Kohana 中ORM模块的使用(基础用法)
- alfresco集群负载均衡配置
- 图标对话框
- mysql合并查询结果