多线程(二)线程控制
一.线程的操作
构造方法:Thread(Runnable target) 创建新的线程对象
Thread(Runnable target,String name) 创建新的线程对象,并指定名字
成员方法: static Thread currentThread() 返回当前线程对象
long getId() 返回当前线程ID
String getName() 返回当前线程名称
void setName() 设置当前线程名称
boolean isAlive() 判断当前线程是否处于活动状态
重要方法:
1.sleep 线程休眠
如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,可以调用Thread类的静态方法sleep()来实现,sleep()有2种重载形式
static void sleep(long millis) 让当前线程暂停指定的毫秒数,在继续执行,比较常用
static void sleep(long millis,int nanos) 让当前线程暂停指定毫秒数加纳秒数,在继续执行
* 让当前线程进入休眠状态,让出当次执行的CPU时间,当时该线程不丢失任何监视器的所属权
2.join 等待线程终止
join()方法的作用是让一个线程等待另一个线程执行完成,它有3种重载形式
join() 等待该线程终止
join(long millis) 等待该线程终止的时间最长为指定毫秒数
join(long millis,int nanos) 等待该线程终止的时间最长为指定毫秒数加纳秒数,不常用
3.interrupt() 线程中断
interrupt()方法只是给线程做了一个中断标记,并没有真正地中断线程,遇到sleep(),join(),wait()方法标记会被清掉,并抛出InterruptException异常,线程会继续执行
interrupt() 中断该线程
Thread.interrupted() 判断当前线程是否被终止
* 但通常会使用自定义标记来中断线程,满足条件后自己终止
4.改变线程优先级
每个线程执行都有一定的优先级,优先级高的线程获得较多的执行机会,优先级低的获得较少的执行机会。
setPriority(int n) 设置优先级,n的范围为1-10之间,一般使用Thread类的3个静态常量,提高可移植性:
MAX_PRIORITY:值为10
MIN_PRIORITY:值为1
NORM_PRIORITY:值为5
getPriority() 获得线程优先级
5.守护线程
守护线程是在后台运行的,是为其他线程提供服务的,当所有用户线程都死亡,守护线程会自动死亡,当虚拟机只剩下守护线程时,虚拟机会自动退出,JVM的垃圾回收线程就是典型的守护线程。
setDaemon(boolean on) 将线程标记为守护线程或用户线程
isDaemon() 判断线程是否为守护线程
3. yield() 线程让步
Thread类的静态方法,和sleep()方法有点相似,只是它让当前线程暂停,但不会阻塞该线程,只是让该线程转入就绪状态,继续抢时间执行。暂停之后,只有优先级与该线程相同或优先级比该线程更高的处于就绪状态的线程才会获得执行的机会。
转载于:https://www.cnblogs.com/gdpdroid/p/4125483.html
多线程(二)线程控制相关推荐
- Java笔记-多线程之线程控制
线程控制 我们已经知道了线程的调度,接下来我们就可以使用如下方法对象线程进行控制. 1.线程休眠 public static void sleep(long millis):让当前线程处于暂停状态,m ...
- Linux系统编程36:多线程之线程控制之pthread线程库(线程创建,终止,等待和分离)
文章目录 (1)POSIX线程库 (2)pthread_create--创建线程 A:关于Linux线程的再理解 B:线程ID及地址空间布局 (3)pthread_exit--线程终止 (4)pthr ...
- 【转】细说.NET中的多线程 (二 线程池)
上一章我们了解到,由于线程的创建,销毁都是需要耗费大量资源和时间的,开发者应该非常节约的使用线程资源.最好的办法是使用线程池,线程池能够避免当前进程中大量的线程导致操作系统不停的进行线程切换,当线程数 ...
- java进阶之多线程二线程池
单线程线程池 class threadPool{public static void main(String[] args) {long f = System.currentTimeMillis(); ...
- VC++中多线程学习(MFC多线程)二(线程的相关操作、线程间的通信)
上一篇笼统介绍了如何创建线程以及线程如何和类成员函数通信,本篇将主要介绍: 线程的相关操作 1.线程的挂起和恢复:SuspendThread.ResumeThread 在线程创建并运行后,用户可以对线 ...
- 多线程(二)线程控制(创建 退出 等待)
线程控制 注意:操作系统不会单独向上创建线程调用接口,只能通过封装库函数完成对线程操作 区分线程和轻量级进程:线程是基于上层(用户态)而言,对应底层(内核态)就是一个轻量级pcb(lwp) 创建: i ...
- java 线程池控制多线程_Java多线程开发系列之四:玩转多线程(线程的控制1)...
在前文中我们已经学习了:线程的基本情况.如何创建多线程.线程的生命周期.利用已有知识我们已经可以写出如何利用多线程处理大量任务这样简单的程序.但是当应用场景复杂时,我们还需要从管理控制入手,更好的操纵 ...
- 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
原文地址:https://www.cnblogs.com/edenpans/p/6020113.html 参考文章:http://ifeve.com/java-concurrency-thread-d ...
- java timer 线程安全_多线程之 线程安全与控制
线程控制 wait和notify方法需要注意的细节:wait方法与notify方法必须要由同一个锁对象调用.因为:对应的锁对象可以通过notify唤醒使用同一个锁对 象调用的wait方法后的线程. w ...
- Java多线程开发系列之四:玩转多线程(线程的控制2)
在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...
最新文章
- 前端部分面试题整理,欢迎补充
- CV之PoseEstimation:Pose Estimation人体姿态估计(AI识人,OpenPose+DeepCut+RMPE+Mask RCNN)的简介、案例应用之详细攻略
- Android集成Firebase(含Analytics功能)
- java自动转换需要的开头_字符串和数值型进行运算时,字符串如果不是数字开头,会自动转换成什么?...
- 随想录(常用gdb选项)
- Java中string中hashcode_为什么String中的Java hashCode()使用31作为乘数?
- 栈Stack的相关操作(java)
- rust腐蚀服务端设置_腐蚀怎么联机?搭建服务器教程一览
- QT找不到python27.dll或python36.dll解决办法
- mvn命令及生命周期
- 17、Python的循环结构(一)
- SSH 端口转发与 SOCKS 代理
- 黑客第二课:脱屌第一步(主要讲unix-like系统的初步知识)
- 3D MAX眼睛贴图制作过程
- Vue + Element-ui 实现table表格 数据相同项合并
- 鲲鹏鸿蒙概念股,华为鲲鹏概念新龙头股一览 华为鲲鹏概念股有哪些
- 华硕打开桌面计算机没有反应,华硕window10电脑打开就这样,进不去桌面,怎么处理...
- 计算机网络原理第三篇 数据链路层
- 计算机的基础组成部分
- 关于mac上输入 insert和replace的快捷键切换
热门文章
- IOS报错:Unexpected ‘@’ in program
- 实例:如何设计一款好的Metro UI应用
- 逆向最大匹配分词算法
- 分布式大数据sql查询引擎Presto初识
- JSP关于Frameset的简单用法
- Node.js模块化开发||Node.js中模块化开发规范
- C#winform实现鼠标响应左键按下,并记下其坐标
- hdu3037 Saving Beans
- STL_vector
- oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理