线程运行在进程中,一个进程中至少会有一个线程。当多个线程同时运行在一个进程中时,这就是一个多线程应用。每个线程的栈内存是对立的,也就是说一个线程一个栈,线程之间共享堆内存和方法区内存。当jvm调用main函数时会启动一个主线程,垃圾回收器GC是一个单独线程在运行。根据CPU的随机性原理,哪个线程获得到了cpu执行权,哪个线程就执行。
有两种创建线程的方式。
- 继承Thread 类子类重写run();方法。
- 实现Runnable接口,实现run();方法。
线程5个状态:
- 被创建:start()
- 运行:具备执行资格,同时具备执行权;
- 冻结:sleep(time),wait(), 使用notify()唤醒;线程释放了执行权,同时释放执行资格;
- 临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权;
- 消亡:stop()