Thread类中常见的方法和属性
构造方法
方法 | 说明 |
---|---|
Thread() | 创建线程对象 |
Thread(Runnable target) | 使用Runnable对象创建线程 |
Thread(String name) | 创建线程对象,并命名 |
Thread(Runnable target,String name ) | 使用Runnable对象创建线程, 并命名 |
当不指定线程名时,系统会自动生成一个线程名,Thread-x。
属性
ID
getId()
:ID 是线程的唯一标识,不同线程不会重复 ;
名称getName()
:名称是各种调试工具用到 ;
状态getState()
:状态表示线程当前所处的一个情况 ;
优先级getPriority()
:优先级高的线程理论上来说更容易被调度到,不一定准。
是否后台线程isDaemon()
:JVM会在一个进程的所有非后台线程结束后,才会结束运行;
是否存活isAlive()
:指PCB是否执行完成,简单的理解为run 方法是否运行结束了;
是否被中断isInterrupted()
:线程是否中断运行。
是否后台线程
何时用前台线程何时用后台线程? 后台进程一般处理容错比较高的业务或辅助功能,比如统计微信步数,就可以使用后台线程。比如银行转账时,肯定要用前台线程,因为要保证转钱要转完,程序肯定不能提前结束。
线程是否存活
线程中断
1.通过是否中断的标志位。
2.通过调用Thread类提供的interrupted()
方法来中断线程。
**当线程在sleep或阻塞状态时,调用interrupted方法,会中断当前的sleep休眠状态,并抛出异常,
只有当线程状态在RUNNABLE状态时,才会真正的结束线程。
start()和run()
1.直接调用run()
方法并不会申请一个真正的系统线程(PCB),只是单纯的调用对象的方法;
2.调用start()
方法,JVM会调用本地方法去系统中真正的申请一个线程(PCB),并执行run方法中的逻辑。
join()
有时我们需要等待一个线程完成它的工作后,才能进行自己的下一步工作。例如,张三只有等李四转账成功,才决定是否存钱,这时我们需要一个方法明确等待线程的结束。join()
表示让主线程等待,等当前线程都执行完成了才能执行下面的代码。
获取当前线程
//这是Thread类的静态方法
Thread currentThread = Thread.currentThread();
休眠当前线程
Thread.sleep(1000);
这里指定的时间并不一定非常精准,他只能保证在指定时间内PCB不会被重新调度到CPU上执行,所以在代码中不要过度依赖这个时间。
继续加油~