①等待阻塞:处于运行状态的线程执行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方法 。
推荐阅读
- 贺普丁拉米夫定真假如何鉴别
- 腌螃蟹的腌制方法 生腌螃蟹的方法介绍
- 30岁男人成熟昵称有哪些 适合男生的网名
- 萝卜怎么做菜最好吃呀
- 荷下见花问道典故是典故还是成语
- 炒莲藕的技巧
- 翼星求生第一层科技树有什么 第一层科技树介绍
- 如何保存新鲜草莓 保存新鲜草莓的方法
- 萝卜怎么做止咳