共计 1349 个字符,预计需要花费 4 分钟才能阅读完成。
一、线程生命周期(状态)
二、线程死亡(DEAD)
线程会以上面三种形式完结,完结后就是死亡状态。
失常完结
1. run()或 call()办法执行实现,线程失常完结。
异样完结
2. 线程抛出一个未捕捉的 Exception 或 Error。
调用 stop
3. 间接调用该线程的 stop()办法来完结该线程—该办法通常容易导致死锁,不举荐应用。
三、JAVA 线程实现 / 创立形式
- 继承 Thread 类
- 实现 Runnable 接口。
- ExecutorService、Callable<Class>、Future 有返回值线程
-
基于线程池的形式
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
return new ScheduledThreadPoolExecutor(corePoolSize);
}
public static ExecutorService newFixedThreadPool(int nThreads) {
return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>());
}
public static ExecutorService newSingleThreadExecutor() {
return new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
四、sleep 与 wait 区别 - 对于 sleep()办法,咱们首先要晓得该办法是属于 Thread 类中的。而 wait()办法,则是属于
Object 类中的。线程相干的根本办法有 wait,notify,notifyAll,sleep,join,yield 等。 - sleep()办法导致了程序暂停执行指定的工夫,让出 cpu 该其余线程,然而他的监控状态仍然
保持者,当指定的工夫到了又会主动复原运行状态。 - 在调用 sleep()办法的过程中,线程不会开释对象锁。
- 而当调用 wait()办法的时候,线程会放弃对象锁,进入期待此对象的期待锁定池,只有针对此
对象调用 notify()办法后本线程才进入对象锁定池筹备获取对象锁进入运行状态。
五、start 与 run 区别 - start()办法来启动线程,真正实现了多线程运行。这时无需期待 run 办法体代码执行结束,
能够间接继续执行上面的代码。 - 通过调用 Thread 类的 start()办法来启动一个线程,这时此线程是处于就绪状态,并没有运
行。 - 办法 run()称为线程体,它蕴含了要执行的这个线程的内容,线程就进入了运行状态,开始运
行 run 函数当中的代码。Run 办法运行完结,此线程终止。而后 CPU 再调度其它线程。
正文完