多线程内容整理1

54 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
  当你同时启动多个设置了优先级的线程时,并不是 执行完优先级高的线程之后才去执行优先级低的线程,而是高优先级的线程获得CPU的时间片的概率更高,整个的执行流程大致符合高优先级的线程先执行,但前面的执行过程中同样会存在优先级低的线程。
  线程可以分为 ①守护线程 ②用户线程
   其中守护线程是为用户线程而存在的,当用户程序执行结束后,不论守护线程是否执行完毕,守护线程都会结束执行。
设置守护线程的方法: 对象 . setDaemon(true);
判断守护线程的方法: thread . isDaemon();

注意事项:守护、用户线程的设置 要在线程start()之前设置,否则会报错。

线程的常用方法:
a.join :等待此线程执行完成之后,再执行后序的代码。
b.interrupt() 线程终止

image.png 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:销毁状态,线程执行完毕。

image.png