碎片化的时间来写点东西,七零八碎的知识点慢慢完善吧
创建方式
1 继承Thrad类
2 实现Runnable接口
3 实现Callable接口
4 通过线程池
线程状态
-
新建状态(new):
使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程 -
就绪状态(RUNNABLE)
当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。 -
运行状态(RUNNING)
如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。 -
阻塞状态(BLOCKED)
-
死亡状态(DEAD)
线程的生命周期
这里可以知道start与run 区别
- start()方法来启动线程,真正实现了多线程运行。这时无需等待 run 方法体代码执行完毕, 可以直接继续执行下面的代码。
- 通过调用 Thread 类的 start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
- 方法 run()称为线程体,它包含了要执行的这个线程的内容,线程就进入了运行状态,开始运 行run函数当中的代码。 Run方法运行结束, 此线程终止。然后CPU再调度其它线程
线程的优先级
每一个 Java 线程都有一个优先级,这样有助于操作系统确定线程的调度顺序
Java 线程的优先级是一个整数,其取值范围是 1 - 10 默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)
获取当前线程的优先级
Thread.currentThread().getPriority()
分类
守护线程:是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者
用户线程:我们平常创建的普通线程
相关API
线程同步
线程安全
原则:要么只读,要么加锁
并发和并行的区别
线程间的几种通信方式
线程间通信的主要目的是用于线程同步,所以线程没有象进程通信中用于数据交换的通信机制
- 锁机制
- 信号量机制
- 信号机制
未完待补充........
评论区