java多线程2:Thread中的实例方法

1.start()

  start()方法的作用讲白了 就是 “线程规划器”,此线程可以运行,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果。

结论:CPU执行哪个线程的代码具有不确定性

启动的顺序是 m0 m1 m2 但是输出的结果是 Thread-2 Thread-0 Thread-1

这个例子说明: 调用start()方法的顺序不代表线程启动的顺序,线程启动的顺序具有不确定性

 

2.run()

线程开始执行,虚拟机调用的是线程run()方法中的内容。

说明:如果只有run(),没有start(),Thread实例run()方法里面的内容是没有任何异步效果的

换句话说就是:只有run() 而不调用start()启动线程 是没有任何意义的

 

3.isAlive()
测试线程是否处于活动状态,只要线程启动没有终止,方法返回的就是true

 看到在start之前,线程的 isAlive是false。start()之后就是true了,

 

4.getId()

在一个java应用中,有一个Long型的全局唯一的线程ID生成器 ThreadSeqNumber,每new出来一个线程都会把这个自增一次,并赋予线程tid属性,这个Tread自己做的,用户无法执行一个线程的id

 

5.getName()

这个方法也比较简单。我们new一个线程的时候,可以指定该线程的名称,也可以不指定。

如果指定,那么线程的名字就是我们自己指定的,getName()返回的也是开发者指定线程的名字。

如果不指定,那么Thread中的一个int型全局唯一的线程初始号生产器 ThreadInitNum,java 先把threadInitNum自增

然后以 “Thread-threadInitNum”的方式来命名新生的线程

 

 

6.getPriority()和setPriority(int newPriority)

这两个方法用户获取和设置线程的优先级,优先级高的CPU得到的CPU资源比较多,设置优先级有助于帮“线程规划器”确定下一次选择哪一个线程优先执行。

换句话说:两个在等待CPU的线程,优先级高的线程越容易被CPU执行

请看例子:

可以看出:线程默认的优先级为5,如果不手动制定,那么线程的优先级具有继承性,比如线程A启动线程B,那么线程B的优先级和线程A的优先级相同。

 

7.isDeaMon setDeaMon(boolean on)

java中有两种线程,一种是用户线程,一种是守护线程,守护线程是一种特殊的线程,他的作用是为其他线程的运行提供便利的服务,最典型的例子就是GC线程,如果进程中不存在非守护线程,那么守护线程自动销毁,因为没有存在的必要,为别人服务,结果服务的对象都没有了,当然要销毁了,

情况例子:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值