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类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
随机推荐
- js数组常用添加方法有两种
//头部 //this.list.unshift({name:this.itemName,date:new Date()}); //尾部 this.list.p ...
- Go语言核心36讲(Go语言实战与应用十九)--学习笔记
41 | io包中的接口和工具 (下) 上一篇文章中,我主要讲到了io.Reader的扩展接口和实现类型.当然,io代码包中的核心接口不止io.Reader一个. 我们基于它引出的一条主线,只是io包 ...
- JSOI(联合省选)2021 划水记
流水账. Day 0 18:10 去本部拿准考证,结果发现已经没有人了./ruo 敲了几份板子,很早就去睡觉了. Day 1 7:30 到 NFLS 拿到准考证,几乎没有人来.于是做起了政治作业. 然 ...
- 使用BRAKER2进行基因组注释
来自:https://www.jianshu.com/p/e6a5e1f85dda 使用BRAKER2进行基因组注释 BRAKER2是一个基因组注释流程,能够组合GeneMark,AUGUSTUS和转 ...
- datamash 命令行下的快速计算工具
github地址:https://github.com/agordon/datamash
- 数据库命令补全工具mycli
一.安装 我的数据库安装的是win版本,安装python后,直接命令行: 1 pip install mycli 即可. 二.使用 进入命令行后输入: 1 mycli -u root -p 88888 ...
- linux vi和vim编辑器
所有的Linux系统都会内建vi文本编辑器,vim具有程序编辑的能力,可以看作是vi的增强版本 三种常见模式 正常模式 以vim打开一个文档直接进入的模式,快捷键可以使用. 1.这个模式可以使用上下左 ...
- JVM结构详解
JVM 结构详解 JVM 结构图 程序计数器(PC 寄存器) 程序计数器的定义 程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址.若当前线程正在执行的是一个本地方法,那么此时程 ...
- 日常Java 2021/11/4
ServerSocket类的方法服务器应用程序通过使用java.net.ServerSocket类以获取一个端口,并且侦听客户端请求. 构造方法: public ServerSocket(int po ...
- A Child's History of England.10
In the next reign, which was the reign of Edward, surnamed The Elder, who was chosen in council to s ...