什么是多线程:线程既是一个单独程序流程。多线程是指一个程序可以同时运行多个任务,每个任务由一个单独的线程来完成。也就死说,多个线程可以同时在一个程序中运行,并且每一个线程完成不同的任务。 程序可以通过控制线程来控制程序的运行,例如线程的等待、休眠、唤起线程等。
什么是线程:传统的程序设计语言同一时刻只能执行单任务操作,效率非常低,如果网络程序在接收数据时发生阻塞,只能等到程序接收数据之后才能继续进行。随着Internet的飞速发展,这种单任务运行的状态越来越不被接受。如果网络接收数据阻塞,后台服务程序就会一直处于等待状态而不能继续任何操作。这种则色情况京城发生,这时的CPU资源完全处于闲置状态。Thread创建:Java中有两种方法创建线程:一种是对Thread类进行派生并覆盖run方法;另一种是通过Runnable接口创建。
1.对Thread类进行派生并覆盖run方法:继承Thread类并覆盖Thread类的run方法完成线程类的声明,通过new创建派生线程类的线程对象。run中的代码实现了线程的行为。
2.通过实现Runnable接口创建:利用实现Runnable接口来创建线程的方法可以解决Java语言不支持的多重继承的问题。Runnable接口提供了run()方法的原型,因此创建新的线程类时,只要实现此接口,即只要特定的程序代码实现Runnable接口中的run()方法,就可完成新线程类的运行。
线程的周期:线程的整个周期由线程创建、可运行状态、不可与进行状态和退出等部分组成,这些状态之间的装化是通过线程提供的一些方法完成的。线程生命周期的概念;一个线程有4种状态,任何一个线程都处于这4种状态中的一种状态。
1、创建(new)状态:调用new方法产生一个线程对象后、调用start方法前所处的状态。线程对象虽然已经创建,但还没有调用start方法启动,因此无法执行。当线程处于创建状态时,线程对象可以调用start方法进入启动状态,也可以调用stop方法进入停止状态。
2、可运行(runnable)状态:当线程对象执行start()方法后,线程就转到可运行状态。进入此状态只是说明线程对象具有了可以运行的条件,但线程并不一定处于运行状态。因为在但处理器系统中运行多线程程序时,一个时间点只有一个线程运行,系统通过调度机制实现宏观意义上的运行线程共享处理器。因此一个线程是否在运行,除了 线程必须处于Runnable状态之外,还取决于优先级和调度。
3、不可运行(non runnable)状态:线程处于不可运行状态是由于线程被挂起或者发生阻塞,例如对一个线程调用wait()函数后,它就可能进入阻塞状态;调用线程的notify或notifyAll方法后它才能再次回到可执行状态。
4、退出(done)状态:一个线程可以从任何一个状态中调用stop方法进入退出状态。线程一旦进入退出状态就不存在了,不能再返回到其他的状态。除此之外,如果线程执行完run方法,也会自动进入退出状态。调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。先调用start后调用run,这么麻烦,为了不直接调用run?就是为了实现多线程的优点,没这个start不行。
2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码;程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
多线程就是分时利用CPU,宏观上让所有线程一起执行 ,也叫并发。