①等待阻塞:处于运行状态的线程执行wait()方法,使线程进入等待阻塞状态 。
②同步阻塞:线程获取同步的同步锁失败(因为同步锁被其他线程占用) 。
③其他阻塞:当通过调用线程的sleep()或join()发出I/O请求时,线程会进入阻塞状态 。当sleep()状态超时时,join()等待线程终止或超时,或者I/O处理完成,线程再次进入就绪状态 。
5)死状态:当一个正在运行的线程完成它的任务或者其他终止条件发生时,线程会切换到终止状态 。
四 。多线程的目的和意义
多线程的意义:其实任何程序的执行都需要cpu的执行权,由cpu决定执行哪个程序 。那么多线程的存在其实就是“充分利用cpu资源” 。当某个线程的处理不需要占用cpu , 并且处理I/O时,就给了其他需要占用cpu资源的线程获取cpu资源的机会 。从根本上说,这就是多线程编程的目的 。
多线程的用途:与大多数其他编程语言不同,Java本身有内置的多线程支持 。使用多线程可以帮助我们最大限度的利用cpu , 编写高效的程序,最小化空空闲时间,这对于Java运行的交互式网络环境是必不可少的 , 因为空空闲时间是公共的 。比如网络的传输效率远低于计算机的处理速度 , 本地文件系统资源的读写速度远低于cpu的处理能力 。做多线程 , 充分利用这些空空闲时间 。
五、线程的实现 。
①继承线程类:
使用thread类实现多线程代码 , 需要重写run()方法,但是重写run()方法后,只使用Thread类在main函数中创建对象,然后调用start()方法 。
这里你可能会问,为什么不直接调用重写后的run()方法呢?而是使用start()方法启动线程的操作?
这里我简单回答一下 。首先,方法可以由对象执行 。run()方法 , 但它要么是多线程方法 , 要么是公共方法 。若要实现多线程 , 必须使用对象 。start()方法 。Java中真正的多线程是start中的start()方法 , run()方法只是一个普通的方法 。
【线程的概念和特点 线程有哪些】②实现可运行接口:
③继承线程类的方法和实现Runnable接口的方法的联系和区别:
(1)1)Thread类本身也实现了Runnable接口,所以也实现了Runnable接口中的run方法 。
(2)当使用继承的Thread类实现线程时,我们需要重写run方法,因为Thread类中的run方法本身什么也不做 。
(3)在实现Runnable接口实现线程时,我们需要重写run方法,然后使用新的Thread(Runnable)方法生成线程对象 。此时 , 线程对象中的run方法将执行我们自己实现的Runnable接口中的run方法 。
推荐阅读
- 吊兰叶子蔫了还能活吗,吊兰的叶子为什么是蔫的不起来
- 蜈蚣可以直接踩死,蜈蚣能不能踩死大过年
- 华东五市都有什么好玩的地方
- 鱿鱼须怎么清洗干净 鱿鱼须怎样才能清洗的更干净
- 十大平民纯粮酒 纯粮食酒有哪些
- 部队单杠引体向上训练方法
- 贱的拼音 贱字读音及解释
- 部落与弯刀更新计划一览 部落与弯刀后期将会更新哪些内容_网
- 英语四级报名时间 英语四级报名时间是什么时候