Java线程相关总结
- 更新时间:2022-06-18 09:12:29
- 编辑:彭明哲
参考资料
- Java工程师面试突击第3季 / 4.52 GB / 码小辫 推荐度:
- 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版) PDF 电子书 / 253 MB / 周志明 推荐度:
- Java EE Web编程 PDF 电子书 / 62.27MB / 刘甫迎 推荐度:
正文内容
Java 线程
一、线程的生命周期
1.五种状态:新建状态、就绪状态、运行状态、阻塞状态、消亡状态
2.就绪状态的线程表示有权利去获取CPU的时间片,CPU时间片是执行权,当线程拿到CPU时间片之后就马上执行run方法,这个时候就代表进入了运行状态
二、线程的调度与控制
通常我们的计算机只有一个CPU,CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。在单CPU的机器上线程不是并行运行的,只有个在多个CPU上线程才可以并行运行。Java虚拟机要负责线程的调度,取得CPU的使用权,目前有两种调度模型:分时调度模型和抢占式调度模型,Java使用抢占式调度模型。
分时调度模型:所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片;
抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取CPU时间片相对多一些。
线程优先级主要分为三种:MAX_PRIORITY(最高级);MIN_PRIORITY(最低级);NORM_PRIORITY(标准)默认
package com.bjpowernode.java_learning; import com.sun.imageio.plugins.tiff.TIFFT4Compressor; public class D104_1_MultiThreadDispatchAndControl { public static void main(String[] args) { //如何获取当前线程对象 Thread t = Thread.currentThread();//t保存的内存地址指向的是线程是“主线程对象” //获取线程的名字 System.out.println(t.getName()); Thread t2 = new Thread(new Processor104_1()); t2.start(); Thread t3 = new Thread(new Processor104_1()); t3.start(); //可以给线程起名字 Thread t4 = new Thread(new Processor104_1()); t4.setName("t4"); t4.start(); } } class Processor104_1 implements Runnable{ public void run() { Thread t = Thread.currentThread(); System.out.println(t.getName()); } }
三、线程的优先级
1.线程优先级的获取的CPU时间片会相对多一点
(1)优先级为1-10
(2)最低为1
(3)最高为10
(4)默认为5
package com.bjpowernode.java_learning; public class D105_1_PriorotyOfMultithread { public static void main(String[] arsg) { System.out.println(Thread.MAX_PRIORITY); System.out.println(Thread.MIN_PRIORITY); System.out.println(Thread.NORM_PRIORITY); System.out.println("================="); Thread t1 = new Processor105(); t1.setName("t1"); Thread t2 = new Processor105(); t2.setName("t2"); System.out.println(t1.getPriority()); System.out.println(t2.getPriority()); //设置优先级 t1.setPriority(5); t2.setPriority(4); t1.start(); t2.start(); } } class Processor105 extends Thread{ public void run() { for(int i=0;i<5;i++) { System.out.println(Thread.currentThread().getName()+"--->"+i); } } }
四、源码:
D105_1_PriorotyOfMultithread.java
https://github.com/ruigege66/Java/blob/master/D105_1_PriorotyOfMultithread.java
D104_1_MultiThreadDispatchAndControl.java
https://github.com/ruigege66/Java/blob/master/D104_1_MultiThreadDispatchAndControl.java
以上就是Java 线程相关总结的详细内容,更多关于Java 线程的资料请关注码农之家其它相关文章!
Java相关教程
-
Java中的线程中断实例分析
这篇文章主要介绍了Java 中的线程中断的相关资料,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
发布时间:2021-05-31
-
关于java线程池重要设置详解
这篇文章主要介绍了关于线程池你不得不知道的一些设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布时间:2019-07-02
-
浅析java 多线程的同步
这篇文章主要介绍了java 多线程的同步几种方法的相关资料,这里提供5种方法,需要的朋友可以参考下
发布时间:2020-01-15
-
解析Java多线程产生死锁的必要条件
今天小编就为大家分享一篇关于Java多线程产生死锁的必要条件,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2020-02-08
-
java线程池使用后是否需要关闭
这篇文章主要给大家介绍了关于java线程池使用后到底要不要关闭的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编
发布时间:2020-01-10
-
java中如何实现两个线程同时写一个文件
这篇文章主要为大家详细介绍了java两个线程同时写一个文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2020-03-11
-
解析Java线程池创建过程
那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。下面我们来详细了解一下吧
发布时间:2020-03-14