多线程
线程和进程的区别
可以简单的理解为进程是一个应用程序,进程是线程的集合,每一个线程是进程的一条执行路径
(main入口为主线程,自己创建的为子线程 gc线程 专门进行垃圾回收)
为什么要用到多线程
提高程序效率
多线程创建方式
- 继承Thread类,重写run方法
- 实现Runnable接口重写run方法
- 使用匿名内部类方式
注:启动需要用start()不用用run(),run相当于在主线程进行运行,没有建立新线程
注:在run方法中不能抛出异常,只能try catch
使用继承Thread类好还是使用实现Runnable接口好
使用Runnable接口好,实现了接口后还可以再继承(Thread和Runnable之间是父子关系,由Thread的源码可以看出,Thread是对Runnable的实现,请看源码)
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
实现Runnable没法直接使用getId和getName,可以使用Thread.currentThread()得到当前线程对象再去使用getId和getName
sleep方法介绍
sleep作用让当前线程从运行状态变为休眠状态,如果时间到期会到运行状态
注:sleep不能释放锁,wait可以释放锁
多线程运行状态
线程从创建、运行到结束总是处于下面五个状态之一: 新建状态、就绪状态、运行状态、阻塞状态、死亡状态。