java Thread 简单总结
来源:互联网 发布:怎样修炼丹田知乎 编辑:程序博客网 时间:2024/06/09 20:08
引出多线程
假设我们有这样一个需求:在web应用中,要图片的下载与显示在宏观上的同步,那么我们就需要启动两个线程并发地去执行这两个操作,一个线程用于下载图片(downThread),另一个线程用于显示图片(displayThread),但是,displayThread必须要等到downThread的线程执行完后,通知它进行显示图片,这就需要对这两个线程进行合理的操作,来实现我们的需求。
一、理解多线程
多线程是一种并发机制,它允许并发的执行多个指令,每个指令都是一个线程,这些线程之间是相互独立的。
线程是一种轻量级的进程,并且线程是依赖进行而存在的,它进程一样可以独立地执行操作,其执行操作需要受到操作系统的调度,它和进程之前的区别是它没有独立的存储空间,和其依赖的进行共享存储空间,这是多个线程之间的通信变的更加简单。
线程的并发并不是真正物理意义上的”同时“,而是在宏观上是同时即并发执行的,其在微观上还是同步的,只是由于CPU的切换速度比较快,给用户的感觉就是在同时执行,当计算机中只有一个CPU时,是不可能实现并发的,依然还是同步的。
二、JAVA中的多线程
在JAVA中,多线程机制是JAVA的一大特点,其多线程的实现方式特别的简单,具体实现如下:
实现方式一:
在JAVA中我们可以写一个继承与java.lang.Thread的子类,重写run()方法,调用start()方法启动线程来实现多线程
由于这种方式是使用继承机制实现的,所以该实现方式将会受到继承机制的制约,无法实现继承,即:如果我们现在有这样一个需求,需要这个已经继承了Thread类的子类,去拥有另一个类的特性,那么我们现在使用继承是无法实现的,因为JAVA不支持多继承,那么我们的解决方案也就是采用Java中为了实现多继承而采用的方案,即:采用接口技术。
实现方式二:
实现方式二我们将采用接口技术实现线程的创建,这种实现方式,使得线程与任务进行分离,使线程与任务之间有了更加明确的界限,即线程就是线程,任务就是任务。
实现步骤:
1、创建一个Thread对象
2、创建Thread对象时给其构造方法中传入一个匿名对象,该匿名对象实现Runable接口
3、重写Runable接口中的run()方法,在该方法中实现自己的业务代码
4、调用start()方法启动该线程
具体实现如下:
这种方式实现的线程在创建时更加灵活、紧凑,程序看起来更加“美“,推荐使用此方式创建线程。
三、线程的四种状态
1、创建状态(新建状态):线程被创建,但是没有执行start()方法,该线程不能被执行,也无法获得CPU的时间(无法被调度,无法被CPU执行)
2、就绪状态:线程调用了start()方法,该线程被纳入线程调度机制,得以并发执行,等待被分配到CPU时间,当被分配到CPU时间时就可以执行run()方法了
3、阻塞状态:当线程调用了sleep(long time)时,该线程会放弃当前CPU的时间,让当前的线程进入睡眠阻塞time毫秒,当时间消耗完毕后,自动进入runnable状态。
4、死亡状态:当前线程调用了stop()方法或者destroy()方法,该线程将会进入死亡状态,但是不推荐使用,stop方法会产生异常,destroy将不会释放锁。
0 0
- java Thread 简单总结
- java Thread两种简单用法总结
- java Thread两种简单用法总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- Java Thread 总结
- struts详解
- windows 位图结构详解
- Python中函数的参数定义和可变参数
- sort list leetcode (归并排序)
- #leetcode#Maximum Subarray
- java Thread 简单总结
- iOS开发 -UIScrollView详解
- Java代码规范文档
- Openwrt启动后的脚本运行(二)
- HTML5之图形绘制技术(Canvas Vs SVG)
- Linux常用命令(六)——帮助命令
- jade学习总结
- C#中修改配置文件的方法
- 使用IQKeyBoardManger 键盘弹出时导航栏也移动的问题