多线程2_补充_小记

来源:互联网 发布:ipad版淘宝不支持横屏 编辑:程序博客网 时间:2024/06/05 05:33

补充内容:

调度策略:
pc,服务器的调度策略是抢占式调度策略(操作系统调度进程)
手机等小型设备的调度策略是协作式调度(只有当前任务放弃执行或者执行完成后,其他任务才能开始执行,这样的调度策略容易受到恶意程序的干扰和攻击)


生命周期

程序的生命周期分为【新建状态-就绪状态-运行状态-死亡状态–线程阻塞状态】


启动线程不用run(),而用start(),因为start()调用的是底层的run()方法,如果直接执行run()方法,系统会把线程看作普通对象,run()方法也是普通方法,不是线程执行体。

在实现Runnable接口的多线程方法中,如果父类没有throws异常的话,该方法也不能直接throws异常。


继承Thread的类获取线程对象用this,创建Thread子类是线程对象
实现Runnable接口获取线程对象用Thread.currentThread.方法获取,创建的Runnable对象是线程对象的target。


用实现Runnable,callable接口的方法创建多线程,优点:
1、是可以继承其他类而继承Thread类的方法不能继承
2、多线程共享一个target对象,适合多线程处理同一份资源,实现CPU、代码、数据分离


sleep和yield的区别
sleep:1、会使线程进入阻塞状态,过了阻塞时间后进入就绪状态
2、暂停后,任意优先级的线程都能来抢夺CPU的处理权
3、sleep会抛出异常InterruptedException

yiled:1、强制使得线程进入就绪状态
2、暂停后,只有优先级相同或者优先级更高的线程才能抢夺cpu的处理权
3、不抛异常

相对来说,sleep()有更好的可移植性,推荐使用sleep()。

原创粉丝点击