基本概念
进程和线程
- 进程
进程是系统进行资源分配的最小单位,其中资源包括:CPU 、内存空间、磁盘IO等 - 线程
线程是CPU调度的最小单位,必须依赖于进程而存在
Java中的线程
一个Java程序从main()方法执行开始,就会产生多个工作线程,线程内容如下:
- Monitor Ctrl-Break 监控Ctrl-break中断信号
- Attach Listener 内存dump,线程dump,类信息统计,获取系统属性等。
- Signal Dispatcher 分发给JVM信号的线程
- Finalizer 调用对象finalize 方法的线程
- Reference Handler 清除Reference的线程
- main 程序入口
线程的启动和终止
启动
Java中启动线程的方式只有2种:
- 继承于Thread,然后调用start方法
- 实现runnable 接口,然后交给Thread执行
中断
线程自然终止
自然终止有2种情况,第一个是run方法执行完成,第二是抛出一个未处理的异常导致线程提前结束。
中断
安全中止则是由其他线程通过调用某个线程的interrupt方法对进行中断操作,该中断操作只是对该线程进行了中断标记,并不代表线程A会立即停止操作,因此线程完全可以不理会这种中断请求。线程通过isInterrupted来进行判断是否被中断,也可以调用Thread.interrupted()来进行判断当前线程是否被中断,但是Thread.interrupted()会同时将中断标识改写为false。如果一个线程处于阻塞状态,则再线程检查中断中断标识时如果发现中断标示为true,则会再这些阻塞方法调用出抛出InterruptedException异常,并且再抛出后将线程的中断标示位清除,即重新设置位false。
线程中的方法
- yield方法:使当前线程让出CPU占有权,但让出时间是不可设定的。也不会释放资源。所有执行yield()的线程有可能再进入到就绪态后被操作系统再次选中被执行。
- jion 方法:把指定线程加入当前线程,可以将两个交替执行的线程合并为顺序执行,比如再B中调用了线程A的join方法,直到线程A执行完毕后,才会执行线程B。