多线程基础学习
Posted tianzhiyun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程基础学习相关的知识,希望对你有一定的参考价值。
返回主页面
调度的优先级(Priority)
实验仅证明优先级设置的比较高并不一定先执行,
* 线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。
* 线程的优先级具有继承性,比如A线程启动B线程,则A和B的线程优先级是一样的。
package com.qdb.thinkv.thread.base; import java.util.Random; /** * 以下实验仅证明优先级设置的比较高并不一定先执行, * 线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 * 线程的优先级具有继承性,比如A线程启动B线程,则A和B的线程优先级是一样的。 * */ public class ThreadProiority { static class ThreadA extends Thread{ public void run(){ long startTime=System.currentTimeMillis(); long addResult=0; for (int i = 0; i < 1000000; i++) { new Random().nextInt(); addResult+=i; } long endTime=System.currentTimeMillis(); System.out.println("thread1 use time--->"+(endTime-startTime)); } } static class ThreadB extends Thread{ public void run(){ long startTime=System.currentTimeMillis(); long addResult=0; for (int i = 0; i < 1000000; i++) { new Random().nextInt(); addResult+=i; } long endTime=System.currentTimeMillis(); System.out.println("thread2 use time--->"+(endTime-startTime)); } } public static void main(String[] args) throws InterruptedException { for(int i=0;i<5;i++){ Thread t1=new ThreadA(); t1.setPriority(10); t1.start(); Thread t2=new ThreadB(); t2.setPriority(1); t2.start(); } } }
线程状态
1. 新建( new ):新创建了一个线程对象。
2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。
3. 运行( running ):可运行状态( runnable )的线程获得了 cpu 时间片( timeslice ) ,执行程序代码。
4. 阻塞( block ):阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。阻塞的情况分三种:
(一). 等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放 入等待队列( waitting queue )中。
(二). 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。
(三). 其他阻塞: 运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。 当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。
5. 死亡( dead ):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。
-
疑问只有5种状态吗?
-
wait是什么情况?
https://blog.csdn.net/pange1991/article/details/53860651p0-----
以上是关于多线程基础学习的主要内容,如果未能解决你的问题,请参考以下文章