{:toc}
java多线程和线程池
多线程
1:java天生就是多线程的
java的main方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,实际上java程序天生就是个多线程程序,因为执行的方法是一个名称为main的线程。
1 | //通过这个代码可以获取到当前的线程数量 |
Monitor Ctrl-Break //监控 Ctrl-Break
Signal Dispatcher //分发处理发送给jvm信号的线程
Finalizer // 调用对象finalize
Reference Handler //清除 reference的线程
main // 用户入口线程
2:线程的启动与中止
启动的方式 Thread , Runnable和callable
start()
Suspend(), resume()和stop(), 但是这些api是过期的,线程调用suspend(),调用后,线程不会释放已经占用的资源(比如锁),如果不保证线程正常释放,可能没有给予线程释放工作的机会,因此会导致程序可能工作在不确定的状态下。
Thread.interrupted()和Thread.currentThread().isInterrupted()的区别
Thread.currentThread().isInterrupted():是一个很正常的方法,就是判断线程的状态,不会做出什么改变
Thread.interrupted()会将状态重置,如果是 false的情况下,就不会重置状态,因为就是调用后,让这个线程。感觉线程重新获取了生命,所以后面调用Thread.interrupted(),不会将状态重置了,除非重新调取 Thread.currentThread().interrupt():
1 | public static void main(String[] args) { |
这就充分解释了,interrupt是协作式的,不是强制式,这样就比较安全,可以正常释放线程的一些资源
3: 处于死锁状态的线程无法通过interrupt中断
草稿:
写一个基于线程池的例子,就是下载文件。可以自己进行网络请求封装,等等一些操作。可以网络查找一下