多线程详解1:创建线程 线程状态 线程中的常用方法

多线程的作用就是开辟了多条路径。

一个线程就是独立的执行路径
线程的运行由调度器来安排调度 调度器与操作系统紧密相关
线程会带来额外的开销 

 

创建线程的三种方式

1.extends Thread

2.implements Runnable 

   重写run方法(必须try catch)

  new Thread(new 对象).start();  //不保证立即运行  由CPU调度

3.实现Callable 借口 有返回值(不常用)

call  可以有返回值  throw Exception 

 

线程和lambda表达式结合

//jdk 简化 lambda

    new Thread(()->{
      for (int i = 0; i < 20; i++) {
          System.out.println("一边听歌");
        }
    });

线程的五种状态

新生状态:New Thread();

就绪状态:start() 线程进入就绪状态

运行状态:线程被调度 获取cpu 进入运行状态

阻塞状态: sleep wait join 其他操作如 read write 等引起的阻塞事件让线程进入阻塞状态

阻塞事件解除后 线程重新进入就绪

死亡状态:

stop destroy。不建议使用

 

终止线程:

1.线程正常执行完毕

2.外部干涉--- 加入标识(不要使用 stop destroy)

提供一个boolean 型的终止变量
线程内关联标识
提供修改终止变量方法 外部改变

 

sleep yield join

sleep 线程等待  仍持有CPU (常用于网络延时或者倒计时)

 Thread.sleep();

yield 让出cpu 让当前正在执行的线程暂停 让出cpu 转入就绪状态

 Thread.yield();

join 合并线程  插队线程 :将此线程执行完成后,再执行其它线程,其他线程阻塞。

对象.join()//当前线程被阻塞  该对象插队执行 

 

线程优先级 1-10   NORM_PRIORITY 5 默认   

优先调用级别高的线程  不代表绝对的先后顺序 

守护线程damon:多用于后台操作日志 监控内存使用

用户线程和守护线程 :虚拟机必须确保用户线程执行完毕 不用等待守护线程

默认线程 :用户线程
设置为守护线程 :thread.setDaemon(true); 

 

posted @ 2021-08-25 08:25  下饭  阅读(34)  评论(0编辑  收藏  举报