兖州网站建设多少钱,动漫网站设计方案,自己做网站需要下载什么软件,网站显示百度众测是怎么做的1.继承Thread类
总结#xff1a;通过继承 Thread 类#xff0c;重写 run() 方法#xff0c;而不是 start() 方法
Thread 类底层实现 Runnable 接口类只能单继承
接口可以多继承2.实现Runnable接口
总结#xff1a;通过实现 Runnable 接口,实现 run() 方法#xff0c;依然…1.继承Thread类
总结通过继承 Thread 类重写 run() 方法而不是 start() 方法
Thread 类底层实现 Runnable 接口类只能单继承
接口可以多继承2.实现Runnable接口
总结通过实现 Runnable 接口,实现 run() 方法依然要用到 Thread 类3.实现Callable接口
通过实现 Callable 接口实现 call() 方法使用ThreadFutureTask配合可以得到异步线程的执行结果4.利用线程池来创建线程
用 ExecutorService 创建线程 注意不建议用 Executors 创建线程池建议用 ThreadPoolExecutor 定义线程池。 用的无界队列可能造成 OOM 不能自定义线程名字不利于排查问题。
以上四种方式底层都是基于 Runnable。
4.1标题线程池的五种状态
RUNNING既能接受新任务也会正常处理队列中的任务SHUTDOWN不接受新任务继续把队列中的任务处理完STOP不接受新任务不处理队列中的任务并且正在运行的线程也会被中断TIDYING线程池中没有线程在运行之后线程池状态会自动变成TIDYING并且会调用 terminated()该方法是空方法可以自行扩展实现。TERMINATED terminated() 方法执行完成之后线程池的状态就会变成 TERMINATED