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()方法,表示该线程已经结束。