java 多线程:Thread类常用方法:setPriority优先级、interrupt中断标记、suspend暂停与唤醒resume(已过时);daemon守护线程
常用方法:
- boolean isAlive() 测试此线程是否存活。
- boolean isDaemon() 测试此线程是否为守护程序线程。
- static void sleep?(long millis) 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,具体取决于系统计时器和调度程序的精度和准确性。
- static void sleep?(long millis, int nanos) 导致当前正在执行的线程休眠(暂时停止执行)指定的毫秒数加上指定的纳秒数,具体取决于系统定时器和调度程序的精度和准确性。
- void start() 导致此线程开始执行; Java虚拟机调用此线程的run方法。
- Thread.State getState() 返回此线程的状态。
- void join() 等待这个线程死亡。
- void join?(long millis) 此线程最多等待 millis毫秒。
- void join?(long millis, int nanos) 此线程最多等待 millis毫秒加上 nanos纳秒。
- long getId() 返回此Thread的标识符。
- String getName() 返回此线程的名称。
- int getPriority() 返回此线程的优先级。
- static void yield() 向调度程序提示当前线程是否愿意产生其当前使用的处理器
interrupt方法:
- 想要停止run方法里面的所有代码,可以用return
yield方法的作用:
yield方法的作用是让当前正在运行的线程放弃CPU资源,让给其他线程使用。
/**
* @ClassName ThreadYileldExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/21.
*/
public class ThreadYileldExample {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
int num = 0;
long beginTime = System.currentTimeMillis();
for(int i=0; i<1000000; i ++){
num++;
//Thread.yield();
}
long endTime = System.currentTimeMillis();
System.out.println("计算耗时:" + (endTime - beginTime) + "ms");
});
thread.start();
}
}
线程优先级应用setPriority
public class ThreadPriorityExample {
public static void main(String[] args) {
Runnable r = () -> {
for (int i=0; i<500; i++){
System.out.println("线程:" + Thread.currentThread().getName() + ",运行到" + i);
}
System.out.println("线程:" + Thread.currentThread().getName() + ",运行结束");
};
Thread threadA = new Thread(r,"A");
Thread threadB = new Thread(r,"B");
threadA.setPriority(8);
threadB.setPriority(2);
threadA.start();
threadB.start();
}
}
守护线程:setDaemon(true)
public class DaemonThreadTest {
public static void main(String[] args) {
Thread thread = new Thread() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//设置为守护线程之后,这个代码就不会运行
System.out.println("我是子线程,我运行完了");
}
};
//设置线程为守护线程
thread.setDaemon(true);
thread.start();
System.out.println("我是主线程我运行完了。");
}
}
daemon线程有子用户线程示例:(父级线程都会等待用户线程退出)
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Random; /**
* @ClassName ThreadDaemonExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/21.
*/
public class ThreadDaemonExample {
public static void main(String[] args) {
/**
* 设置为守护线程的子线程
*/
Runnable runnable = () -> { Thread subThread = new Thread(){
/**
* 子线程中的非守护孙子线程
*/
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("睡两秒的孙子线程结束了");
}
};
//孙子线程设置为用户线程
subThread.setDaemon(false);
subThread.start();
System.out.println("子线程运行...."); //子线程执行任务
String filePath = "多线程/src/daemonThreadOutput/subDaemonThreadOut.txt";
try {
System.setOut(new PrintStream(new FileOutputStream(filePath)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
System.out.println("我是子线程,我运行完了");
};
/** 孙子线程为用户线程,main线程为父线程,main线程也不会退出,
* filePath文件内成功写入:
* 我是子线程,我运行完了
* 睡两秒的孙子线程结束了
*/ Thread thread = new Thread(runnable,"子线程");
thread.setDaemon(true);
thread.start();
System.out.println(Thread.currentThread().getName() + "运行完了");
}
}
暂停和唤醒线程(已过时)
- 1,suspend():暂停线程
- 2,resume():恢复线程
/**
* @ClassName ThreadSuspendExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/21.
*/
public class ThreadSuspendExample {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread() {
@Override
public void run() {
int num = 0;
while (true) {
System.out.println("num is " + (num ++));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
System.out.println(Thread.currentThread().getName() + "开始睡眠5S");
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName()+"睡眠结束,我要暂停子线程了...然后再睡5S");
thread.suspend();//暂停线程
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName()+"睡眠结束,我要恢复子线程了...");
thread.resume();
}
}
API文档方法:
java 多线程:Thread类常用方法:setPriority优先级、interrupt中断标记、suspend暂停与唤醒resume(已过时);daemon守护线程的更多相关文章
- 探Java多线程Thread类和Runnable接口之间的联系
首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说 有如下两种情 ...
- Java多线程Thread类了解和使用
创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...
- [Java多线程]-Thread和Runable源码解析
多线程:(百度百科借一波定义) 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提 ...
- Java并发--Thread类详情
以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三.Thread类中的方法 转载原文链接:http://www.cnblogs.com/dolphin0520/p/3920357.html 一 ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- Java多线程中的常用方法
本文将带你讲诉Java多线程中的常用方法 Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...
- java多线程系列8-线程的优先级
在java中设置线程优先级使用setPriority,在jdk中的源代码如下: public final void setPriority(int newPriority) { ThreadGroup ...
- Java多线程——ThreadLocal类的原理和使用
Java多线程——ThreadLocal类的原理和使用 摘要:本文主要学习了ThreadLocal类的原理和使用. 概述 是什么 ThreadLocal可以用来维护一个变量,提供了一个ThreadLo ...
- java基础-Integer类常用方法介绍
java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
随机推荐
- centos与ubuntu安装及相关问题解答
1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 答:Linus的发行版本有slackware,debian,redhat,Alpine,ArchLinux,Gentoo,LFS, ...
- Java设计模式之(十三)——模板方法模式
1.什么是模板模式? Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. ...
- NFLSOJ 1072 - 【2021 六校联合训练 NOIP #1】异或(FWT+插值)
题面传送门 一道非常不错的 FWT+插值的题 %%%%%%%%%%%% 还是那句话,反正非六校的看不到题对吧((( 方便起见在下文中设 \(n=2^d\). 首先很明显的一点是这题涉及两个维度:异或和 ...
- GWAS与GS模型介绍与比较
目录 1.GWAS模型 1.1卡方检验 1.2 相关性系数的t检验 1.3 一般线性模型GLM 1.4 混合线性模型MLM 1.5 压缩混合线性模型CMLM 1.6 SUPER 1.7 FarmCPU ...
- 集群SGE作业调度系统
目录 0. 一些基本概念 1. 常见的几种资源管理和调度系统 2. SGE常见指令 2.1 提交任务 2.2 查看任务 2.3 删除任务 2.4 挂起/恢复任务 2.5 更改任务属性 0. 一些基本概 ...
- 去空格及换行制表符【c#】
string returnStr = tbxContractNO.Text.Replace("\n", "").Replace(" ", & ...
- Vue函数防抖和函数节流
函数防抖(debounce) 应用场景 登录.发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖 调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防 ...
- 日常Javaweb 2021/11/19
Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...
- [源码解析] PyTorch分布式优化器(2)----数据并行优化器
[源码解析] PyTorch分布式优化器(2)----数据并行优化器 目录 [源码解析] PyTorch分布式优化器(2)----数据并行优化器 0x00 摘要 0x01 前文回顾 0x02 DP 之 ...
- Vue中加载百度地图
借助百度地图的 LocalSearch 和 Autocomplete 两个方法 实现方式:通过promise以及百度地图的callback回调函数 map.js 1 export function M ...