开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
当你同时启动多个设置了优先级的线程时,并不是 执行完优先级高的线程之后才去执行优先级低的线程,而是高优先级的线程获得CPU的时间片的概率更高,整个的执行流程大致符合高优先级的线程先执行,但前面的执行过程中同样会存在优先级低的线程。
线程可以分为 ①守护线程 ②用户线程
其中守护线程是为用户线程而存在的,当用户程序执行结束后,不论守护线程是否执行完毕,守护线程都会结束执行。
设置守护线程的方法: 对象 . setDaemon(true);
判断守护线程的方法: thread . isDaemon();
注意事项:守护、用户线程的设置 要在线程start()之前设置,否则会报错。
线程的常用方法:
a.join :等待此线程执行完成之后,再执行后序的代码。
b.interrupt() 线程终止
interrupt()需要配合Thread.interrupted() 或者Thread.currentThread().isInterrupted()的判断一起使用
对比isinterruptid 和 interruptted
1.interrupted属于静态方法
2.interrupted在使用完之后会重置中断标识符,而islnterrupted不 重置中断表示符
c.yield:让出CPU的执行权
yield 方法会让出CPU的执行权,线程调度器重新调度线程执行,此时仍然有一定的机会启动刚被yield的线程
1.守护线程是为了守护用户线程而存在的,当用户线程结束后,守护线程就没必要存在了。
2.线程休眠的两种方式:
①sleep: Thread.sleep( xxx秒 );
②TimeUnit.DAYS.sleep(数字);
3.线程的六种状态:
①NEW:新建,还未启动
②RUNNABLE:运行状态(可细化为运行和就绪两种,区别于是否得到时间片)
③BLOCKED:阻塞状态,遇到锁了
④WAITING:无限等待状态
⑤TIME_WAITING:有时间限制的等待
⑥TERMINATED:销毁状态,线程执行完毕。