JAVA中的多线程学习
上一篇 /
下一篇 2013-05-13 21:11:09
/ 个人分类:JAVA学习
实现线程的方式有两种
第一种是继承Thread,但是由于JAVA中只能单继承,不是太常用
第二种为继承接口Runable
方法同样是覆写run方法,但是要将new出来的对象放到thread的对象中,再调用start方法
这里假若直接调用了run方法,则是创建了线程,但是并没有执行
对于线程,存在五种状态
被创建:new出来后
执行:调用start的方法
冻结:sleep,wait(notify后到运行)
阻塞:具备运行资格,但是没有执行权(比如被synchronized了)
消亡:interrupt(stop)
注:wait方法需要try一下
说到线程,不得不提及锁的概念
即一个共享事物,但是只能被一个用户使用,这时候就得将这个事物加上一把锁,或者将这个方法给synchronized了,
需要注意的是,对于同步函数的锁是this,或者就是调用的事物,但是对于静态同步函数来说,同步的锁是Class,也就是该方法所在类的字节码文件对象,比如 A implentments Runable……synchronized(A.class)
使用在同步中,要对持有锁的线程的操作
等待和被唤醒必须是同一把锁
对于为何是object类型,因为作为锁可以是任意的对象,只有万能的object类才行。
对于1.5后JDK版本,lock接口和condition对象,提供现实Lock操作,一个锁对应多个对象,最后释放锁的动作一定要执行
interrupt 将处于冻结状态线程强制恢复到运行状态,并非结束进程
joint 是抢夺CPU的执行权,当主线程碰到A线程的joint状态时,等待其执行完成
yeild 暂停当前正在执行的对象,释放执行权,减缓线程执行的频率
收藏
举报
TAG: