thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波

thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波



thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波



thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波



thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波



thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波




Hello , 今天给各位童鞋们分享的是Java线程 , 赶紧拿出小本子记下来吧

认识线程(Thread)概念

  • 线程属于进程的组成(每个进程中至少有一个线程(主线程) , 也可以有多个线程)
  • 线程是os进行调度的最小单位 。
  • 进程是系统分配资源(包括CPU)的最小单位 , 线程是系统调度(CPU分配)的最小单位
什么情况下需要线程
原有的执行流(调度单位)因为某些事件堵塞了 , 同时我们还需要运行一些其他的代码时
需要一些调度单位加速我们的代码运行速度
创建Java线程Thread的几个常见属性

如何创建Java线程
  • Thread类——每个Thread对象都是代表一个线程
  • Runnable接口——每个Runnable对象都是一个任务
Thread类是JVM用来管理线程的类 , 每个线程都有唯一的Thread对象关联 。
例子:
  • 线程继承自Thread类 , 并且重写Run方法 。

  • 实现Runnable接口 , 重写其Run方法 , 实例化一个Runnable对象 , 构造Thread对象时 , 将Runnable对象传入 。

Thread对象也可以当做Runnable对象使用
多线程的现象具有随机性 , 随机性的来源——调度机制
start() vs run()
重写run方法 , 是提供线程需要做的事情 , 调用start是真正独立执行 。 启动线程需要调用start方法
Thread类常见的构造方法:

线程中断绝大多数我们的线程代码 , 是跑在一个死循环中的
1、通过一些共享数据让其停止
2、Thread类提供了方法 , 使得其停止
可以认为 , 每个Thread对象中 , 都有一个类似变量让其停止 。
调用方法
其他线程可以调用 . interrupt();
【thread|牛批!终于有大牛把Java线程知识点讲解的如此透彻,收藏一波】在需要停止的线程内部 , 通过调用 boolean Thread.interrupted();
在其内部可能有两种状态:
1、调用类似的sleep方法 , 处于阻塞状态 , 会收一个InterruptedException异常 , 表示需要其停止 。
2、处于就绪状态 , 正在执行代码 ,
Thread.interrupted()返回true , 表示需要其停止

只能建议停止 , 不能强制停止
Thread.interrupted()读取一次后便会清除其中断标志
使用 .isInterrupted()在判断指定线程的中断标志设置不清除中断标志 。
等待一个线程有时候 , 我们需要等待一个线程完成它的工作后 , 才能进行下一步工作 , 例如:甲线程等待乙线程结束 。
使用 . join();
例如:

线程的状态理论上的线程状态分为:初识、就绪、运行和停止

实际上在Java中分为:NEW、RUNNABLE、TERMINATED、BLOCKED、WAITING、TIMED_WAITING

Thread.isXXX()
alive:哪些状态是alive的?
RUNNABLE、TERMINATED、BLOCKED、WAITING、TIMED_WAITING