1.终止线程:
1.使用violate boolean变量退出标志,使线程正常退出,即线程执行完run方法体后,正常退出(推荐)。
2.使用interrupt() 尝试终止线程,但是不一定成功。
3.使用stop()强制终止线程。不安全的是:创建子线程的线程会抛出异常,并且会释放子线程持有的所有的锁。
2.终止线程池
1.shutdown()关闭线程池
线程池不会立马关闭,要等添加到线程池的任务都执行完了,才会关闭。
2.shutdownNow()关闭线程池并终止任务
终止等待执行的线程,并返回他们的列表,尝试终止正在执行的线程,使用的是interrupt(),但是如果线程中没有运用到sleep(),wait(),定时锁等应用,是无法终止线程的。因此可能会等将正在执行的线程执行完毕,才会退出。
2.对于栈内存和堆内存的理解,以及栈内存如何转换为堆内存
1.在函数中定义的一些基本类型变量和对象引用变量,都是在函数的栈内存中分配的
2.堆内存用来存放new创建的对象和数组。jvm里的“堆”特指用于存放Java对象的内存区域,因此Java对象全部在堆上。JVM的堆被同一个JVM实例中的所有Java线程共享。它通常由某个自动内存管理机制所管理,这就是JVM的“垃圾回收”机制。
3.堆主要用于存放对象,栈主要用于执行程序。
4.栈内存中的变量指向堆内存中的变量,这实际上就是Java中的指针。
参考文章:https://juejin.im/post/5e5c5c52f265da575f4e7558#heading-134