线程的优先级  1-10

1. NORM_PRIORITY  5 默认
 2. MIN_PRIORITY  1
 3. MAX_PRIORITY  10

注意:优先级低只是意味着获得调度的概率低。并不是绝对先调用优先级高后调用优先级低的线程。

使用下述方法获得或设置线程对象的优先级。
• int getPriority();

• void setPriority(int newPriority);

/*** 线程的优先级  1-10* 1. NORM_PRIORITY  5 默认* 2. MIN_PRIORITY  1* 3. MAX_PRIORITY  10* * 概率: 不代表绝对的优先级顺序* @author Administrator**/
public class PriorityTest {public static void main(String[] args) {System.out.println(Thread.currentThread().getPriority());  //5MyPriority mp=new MyPriority();Thread t1=new Thread(mp,"1");Thread t2=new Thread(mp,"2");Thread t3=new Thread(mp,"3");Thread t4=new Thread(mp,"4");Thread t5=new Thread(mp,"5");Thread t6=new Thread(mp,"6");//设置优先级在启动前t4.setPriority(Thread.MAX_PRIORITY);t5.setPriority(Thread.MAX_PRIORITY);t6.setPriority(Thread.MAX_PRIORITY);t1.setPriority(Thread.MIN_PRIORITY);t2.setPriority(Thread.MIN_PRIORITY);t3.setPriority(Thread.MIN_PRIORITY);t1.start();t2.start();t3.start();t4.start();t5.start();t6.start();}
}class MyPriority implements Runnable{@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"-->"+ Thread.currentThread().getPriority());  //5Thread.yield();}}


线程分为用户线程和守护线程

虚拟机必须确保用户线程执行完毕

虚拟机不用等待守护线程执行完毕;如:后台记录操作日志、监控内存使用

守护线程:是为用户线程服务的;jvm停止 不用等待守护线程执行完毕
默认:用户线程jvm等待用户线程执行完毕才会停止

/*** 守护线程:是为用户线程服务的;jvm停止 不用等待守护线程执行完毕* 默认:用户线程jvm等待用户线程执行完毕才会停止* @author Administrator**/
public class DeamonTest {public static void main(String[] args) {God god=new God();You you=new You();new Thread(you).start();Thread t=new Thread(god);t.setDaemon(true);//将用户线程调整为守护线程t.start();}
}class You extends Thread{@Overridepublic void run() {for(int i=1;i<365;i++) {System.out.println("happy life...");}System.out.println("ooooo......");}
}
class God extends Thread{@Overridepublic void run() {for(;true;) {System.out.println("bless you...");}       }
}


终止线程的典型方式

终止线程我们一般不使用JDK提供的stop()/destroy()方法(它们本身也被JDK废弃了)。通常的做法是提供一个boolean型的终止变量,当这个变量置为false,则终止线程的运行。

public class TestThreadCiycle implements Runnable {String name;boolean live = true;// 标记变量,表示线程是否可中止;public TestThreadCiycle(String name) {super();this.name = name;}public void run() {int i = 0;//当live的值是true时,继续线程体;false则结束循环,继而终止线程体;while (live) {System.out.println(name + (i++));}}public void terminate() {live = false;}public static void main(String[] args) {TestThreadCiycle ttc = new TestThreadCiycle("线程A:");Thread t1 = new Thread(ttc);// 新生状态t1.start();// 就绪状态for (int i = 0; i < 10; i++) {System.out.println("主线程" + i);}ttc.terminate();System.out.println("ttc stop!");}
}


暂停线程执行常用的方法有sleep()和yield()方法,这两个方法的区别是:

1. sleep()方法:可以让正在运行的线程进入阻塞状态,直到休眠时间满了,进入就绪状态。

2. yield()方法:可以让正在运行的线程直接进入就绪状态,让出CPU的使用权。

获取线程基本信息的方法

* isAlive()  表示线程是否还活着
 * Thread.currentThread()   表示当前线程
 * setName("")  setName("")   表示代理对象的名称

/*** 其他方法* isAlive()  表示线程是否还活着* Thread.currentThread()   表示当前线程* setName("")  setName("")   表示代理对象的名称 * @author Administrator**/
public class InfoTest {public static void main(String[] args) throws InterruptedException {System.out.println(Thread.currentThread().isAlive());//设置名称:真实角色+代理角色MyInfo info=new MyInfo("战斗机");Thread t=new Thread(info);t.setName("公鸡");t.start();Thread.sleep(1000);System.out.println(t.isAlive());}
}
class MyInfo implements Runnable{private String name;public MyInfo(String name) {super();this.name = name;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"-->"+name);}}

Java的知识点30——线程的优先级、终止线程的典型方式、获取线程基本信息的方法相关推荐

  1. android获取子线程id,Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID

    /*** Returns the identifier of this process's user. * 返回此进程的用户的标识符.*/Log.e(TAG,"Process.myUid() ...

  2. java的知识点30——设计模式

    单例模式 核心作用:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 单例模式的优点:由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置.产生其他 ...

  3. Java多线程——线程的优先级和生命周期

    Java多线程--线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  4. java中一个线程最小优先数_Java线程的优先级

    Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的"线程优先级的问题"). 记住当线程的优先级没有指定时,所有线程都携带普 ...

  5. Java线程的调度(线程的优先级、线程睡眠、线程让步、线程插队)

    线程的优先级 : Java语言中线程有优先级,优先级高的线程会获得较多的运行机会. 当程序中有多个线程存在的时候,线程和线程之间的关系并非是平等的. Java语言中线程的优先级用整数表示,取值范围是1 ...

  6. Java多线程 -- 线程的优先级

    Java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行(不完全正确,请参考下面的"线程优先级的问题"). 优先级的取值 Java线程的优先级是一个整数, ...

  7. 2019年秋招 Java 面试知识点梳理(高频问题)

    Java 面试知识点梳理 基础一 JVM-内存区域分配 HotSpot 对象创建 JVM-类加载机制 JVM-内存分配(堆上的内存分配) JVM-GC回收机制 JVM-垃圾收集器 JVM指令重排序 重 ...

  8. java多线程创建方式以及线程安全

    什么是线程 线程被称为轻量级进程,是程序执行的最小单位,它是指在程序执行过程中,能够执行代码的一个执行单位.每个程序程序都至少有一个线程,也即是程序本身. 线程的状态 新建(New):创建后尚未启动的 ...

  9. 【多线程】线程的引入,创建线程的方式,设置线程名字、获取名字,线程优先级priority,加入休眠的方法,,后台线程,礼让线程,Join,中断线程,某电影院,共有100张票线程流程图,3售票窗口,

    多线程 1.线程的引入 进程: 正在运行的程序,是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和资源. 线程: 是进程的单个顺序控制流,或者说就是一个单独执行的路径 一个进程如果只 ...

最新文章

  1. Vue-Cli3.0怎么使用预渲染怎么配置prerender-spa-plugin
  2. laravel 处理excel插件maatwebsite/excel
  3. 微服务接入oauth2_SpringCloud微服务实战系列(十九)Ouath2在真实场景中的应用之客户端接入(第一种写法)...
  4. 《配置管理最佳实践》——2.10 建立构建过程
  5. GridView的Command命令集合
  6. 尚学linux课程---8、rpm软件包安装
  7. GIt思维导图命令+案例分析
  8. Serval and Bus
  9. YbtOJ#20235-[冲刺NOIP2020模拟赛Day9]公共序列【dp】
  10. 如何用最短的时间学会C语言,并掌握C语言的精髓所在?
  11. wifi定位算法android,WIFI定位算法
  12. VNC源码研究(一)
  13. Sql Server 2005 分页
  14. 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数
  15. 15.01万起!全新威马E.5上市:505公里长续航
  16. python获取当前路径和上一层路径_python获取当前路径和上一级路径
  17. 代码安全_弱点(脆弱性)分析 CWE_20200807
  18. java遍历d盘所有文件夹_java遍历指定盘符的所有文件和文件夹
  19. 基于安卓的宠物店预约商城APP源码
  20. 【Lintcode】350. Slash Separating

热门文章

  1. Python3 系列之 编程规范篇
  2. CopyOnWriteArrayList简介
  3. Java多线程之线程并发库原子性操作类
  4. 键盘 Input子系统
  5. Oracle 学习系列之一(表空间与表结构)
  6. 在新的标签页中代开编辑文件
  7. Ubuntu18.04安装pymol
  8. 菜鸟学习物联网---辨析基于Andriod 5.1,Linux,Windows10开发Dragon Board 410c板
  9. Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
  10. Android2.3.7源码结构分析