多线程(二)Thread类

常用方法:

1.start():启动当前线程,调用当前线程的run,一般一些set方法(例如setName,setPriority要在start前设置)

2.run():该方法其实也是thread implements 了 runnable接口的,并且重写的时候,先判断if(target!=null){target.run()}其中target是thread里的一个runnable类型的属性。也就是,如果target有实例,就用target的run函数

3.currentThread():静态方法,返回执行当前代码的线程

4.getName():获取当前线程的名字

5.setName(string):设置当前线程的名字

6.yield():静态方法,释放当前cpu的执行权(但是有可能刚释放,cpu又分给你了)

7.sleep(long millitime):静态方法,让当前线程睡眠指定的毫秒数。在该指定时间内是阻塞状态,cpu不会分配给该线程,当过了这个时间,也不一定立刻就分给它,也是看cpu喜欢。

8.join():在a线程中调用b线程的join,会阻塞a线程,等b线程执行完以后,才结束a的阻塞状态

9.isAlive():判断当前线程是否存活(一般run里面代码跑完就死了)

10.stop():过时了,不推荐用,强制执行当前线程

构造器:

1.Thread():空参构造器

2.Thread(string): 传进一个string相当于setname了,给该线程设置名字

3.Thread(runnable):传进实现了runnable接口的子类,并且赋给了thread的target属性。

4.Thread(Runnable target, String name)

设置线程优先级:

thread有三个静态常量:

MAX_PRIORITY=10;MIN_PRIORITY=1;NORM_PRIORITY=5;

线程的优先级有1-10个等级,所有线程默认是5,。

getPriority()可以获取当前线程优先级,setPriority(int)可以设置当前线程优先级

高优先只是有大概率能抢占cpu的执行权,但不是一定的,所以并不是高优先级一定比低优先级先执行。

线程分类:

分为守护线程和用户线程,守护线程是服务用户线程的,它随用户线程的消亡二消亡。例如main是用户线程,gc是守护线程。

使用thread.setDaemon(true)可以设置当前线程为守护线程(同样在start前设置)

线程的生命周期(线程的几种状态):


以上状态都都定义在thread类的内部类state里:

新建就是new一个Thread的时候

就绪是start之后的状态,但是还没有运行,因为cpu还没给他分配使用权,但是已经准备好了接受使用权。

运行是得到了使用权

阻塞是cpu想给他使用权都不可以给

死亡就是死了

其中suspend方法过时了,因为会导致死锁,resume因为和它配套使用也过时了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容