Java多线程

1.Java创建线程方法

    Java中有2种创建多线程的方法:

    第一种继承Thread类:Thread类是在java.lang包中定义的。

    第二种实现Runnable接口:在使用Runnable定义的子类中没有start()方法,只有Thread类中才有。

    第三种实现Callable和Future接口:接口种call()方法具有返回值。

    三种方法使用区别:

    1.实现Runnable接口可以避免Java类单继承的限制。

    2.当一组线程访问相同资源的时候,适合使用Runnable接口。

    3.如果需要返回值,可以使用Callable和Future。

2.Java线程的五种状态

    新建状态:线程对象被创建后,即是新建状态。如:Thread t = new MyThread();

    就绪状态:创建的线程对象调用start()方法后,进入就绪状态。就绪状态的线程并不是已经执行,只是能够被CPU调用。

    运行状态:CPU调用处于就绪状态的线程,该线程才能真正被执行。就绪状态是进入运行状态的唯一入口,也就是说CPU只能调用就绪状态的线程。

    阻塞状态:处于运行状态的线程由于某种原因放弃对CPU的使用权,此时进入阻塞状态。直到再次进入就绪状态,才有可能被CPU调用。

                      根据阻塞产生的原因不同,阻塞状态可分为三种:

                       1.等待阻塞:运行状态中的线程执行了wai()方法,进入等待阻塞状态。

                       2.同步阻塞:线程在获得同步锁(synchronized)失败,进入同步阻塞状态。

                       3.其他阻塞:线程调用sleep(),join()或者发出I/O请求的时候,线程会进入阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、

                                            或者I/O处理完毕时,线程重新转入就绪状态。

     死亡状态:线程运行完了或者因为异常退出run()方法,表示该线程已经结束。

                      

原文地址:https://www.cnblogs.com/michaelShao/p/8991582.html