多线程

不要在构造函数中启动线程,特别是当线程将会回调初始线程的时候。

多个需要操作相同的共享资源集,要确保以相同的顺序请求这些资源



抢占,
让各线程公平的使用CPU
blocked,
即使阻塞,依然持有已经拥有的锁
yield() 
礼让CPU,资源还是占有的
sleep()
依然持有已经拥有的锁,给予其它线程运行机会。
interrupt()
其它线程可以调用该线程的interrupt()唤醒该线程,使其正常执行。
join()
连接两个线程,当Bthread需要Athread的执行结果时,Bthread调用Athread.join()
wait()
释放此对象的锁并暂停,直到得到其它线程的通知notify()。
一般将wait放在检查当前对象状态的while循环中。

wait是等待对象或资源达到某种状态,而join是等待一个线程结束。



①start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。

②Thread.sleep()方法调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留出一定时间给其他线程执行的机会(也就是靠内部自己协调)。

备注:sleep方法与wait方法的区别:
①sleep方法是静态方法,wait方法是非静态方法。
②sleep方法在时间到后会自己“醒来”,但wait不能,必须由其它线程通过notify(All)方法让它“醒来”
③sleep方法通常用在不需要等待资源情况下的阻塞,像等待线程、数据库连接的情况一般用wait

备注:sleep/wait与yeld方法的区别:
①调用sleep或wait方法后,线程即进入block状态,而调用yeld方法后,线程进入runnable状态

备注:wait与join方法的区别:
①wait方法体现了线程之间的互斥关系,而join方法体现了线程之间的同步关系
②wait方法必须由其它线程来解锁,而join方法不需要,只要被等待线程执行完毕,当前线程自动变为就绪
③join方法的一个用途就是让子线程在完成业务逻辑执行之前,主线程一直等待直到所有子线程执行完毕。

1、新建状态(New):
2、就绪状态(Runnable):
3、运行状态(Running):
4、阻塞状态(Blocked):
阻塞三态:等待池,锁池,其它阻塞态不放入池
5、死亡状态(Dead):


多线程编程的基础知识点
http://www.blogjava.net/pengpenglin/archive/2008/09/02/226292.html
Java多线程编程总结
http://lavasoft.blog.51cto.com/62575/27069
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值