Thread

创建线程
重写run方法,创建Thread对象start起来
用Thread的构造器Thread(Runnable target)创建出一个Thread对象,start起来。
临时阻塞
线程一旦启动run方法就会加入CPU执行队列中,进入等待CPU执行的状态.这个时候如果CPU没有执行该线程而去执行其他任务,则该线程进入了临时阻塞状态,如果CPU的执行权切换到该线程,则继续执行run方法。
还可以在得到执行权的时候调用Thread.yeild()
语句,释放执行权。
冻结
sleep()方法:这个方法会使线程冻结,如果执行到的代码块具有原子性,冻结的时候不会释放锁。sleep时间到,则线程回到运行状态。
suspend()方法和resume()方法:当线程调用suspend
方法时,与sleep一样,但需要用resume来唤醒线程,目前该方法已弃用。容易造成死锁,下面会介绍。
waite()方法和notify()方法或者nofityAll()
方法:notify表示随机唤醒冻结线程池里面的任一线程,notifyAll表示唤醒冻结线程池中的所有线程。

消亡
run()
方法结束,自然而然线程也就等待被回收了。可以使用volatile
修饰的标记位。使用stop()。确实能退出,但是不安全,官方已弃用。stop的线程会抛error:java.lang.ThreadDeath,可用try run方法中的代码块来catch Throwable.
使用interrupt()方法,可分为两种情况线程处于冻结状态,例如使用了Thread.sleep()方法,如果sleep时间还没到,这个时候调用Thread#interrupt()则会抛InterruptedException,然后继续执行run方法直到退出。

死锁的必要条件
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容