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
原创粉丝点击