线程在面试中已经是常客了,也是我们必备的知识点,关于线程,问的最多的便是线程是什么?为什么使用多线程?多线程的示例以及解决方案?线程池是什么?
一.线程是什么?
Thread类中有这样的明确定义:线程是程序中执行的线程,Java虚拟机允许程序同时运行多个执行线程。
1.线程有6种状态:新建,运行(可运行),阻塞,等待,计时等待和终止。
新建:当使用new操作符创建新线程时,线程处于“新建“状态
运行(可运行):调用start()方法
阻塞:当线程需要获得对象的内置锁,而该锁正在被其他线程拥有
等待:当线程等待其他线程通知调度表可以运行时
计时等待:对于一些含有时间参数的方法,如Thread类的sleep()
终止:当run()方法运行完毕或出现异常时
查看运行状态:Thread类的getState()方法
1)编写类ThreadState,实现Runnable接口
public class ThreadState implements Runnable {
public synchronized void waitForASecond() throws InterruptedException {
wait(500);//将当前线程暂时等待0.5秒或其他线程调用notify()或notifyAll()
}
public synchronized void waitForLong() throws InterruptedException {
wait();//永久等待,直到其他线程调用notify()或notifyAll()
}
public synchronized void notifyNow() throws InterruptedException {
notify();//唤醒由调用wait()方法进入等待状态的线程
}
@Override
public void run() {
try {