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类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
随机推荐
- 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)
题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...
- c++STL容器之string容器
本质:string是c++风格的字符串,而string本质上是一个类 string和char*的区别: char*是一个指针: string是一个类,类内部封装了char*,管理这个字符串,是一个ch ...
- 46.Valid Parentheses
Valid Parentheses My Submissions QuestionEditorial Solution Total Accepted: 106346 Total Submissions ...
- 完全用Deepin Linux娱乐、工作、学习(1)
截至今天我已经用全Deepin Desktop Linux环境娱乐.工作.学习了100多天.当你看到这个桌面的时候,会不会觉得它是MacOS?错了,它是Deepin Desktop Linux,而且它 ...
- Oracle-SQL语句的语法顺序和执行顺序
SQL语句的语法顺序和执行顺序了,我们常见的SQL语法顺序如下: SELECT DISTINCT <Top Num> <select list>FROM [left_table ...
- JAVA中数组的基本概念与用法
JAVA中数组的基本概念与用法 1. 数组的定义与特点 数组的一种引用数据类型 数组中可以同时存放多个数据,但是数据的类型必须统一 数组的长度在开始时就需要确定,在程序运行期间是不可改变的 虽然可以使 ...
- 面向Web应用的并发压力测试工具——Locust实用攻略
1. 概述 该方案写作目的在于描述一个基于Locust实现的压力测试,文中详细地描述了如何利用locustfile.py文件定义期望达成的测试用例,并利用Locust对目标站点进行并发压力测试. 特别 ...
- A Child's History of England.35
The other two clung to the yard for some hours. At length the young noble said faintly, 'I am exhaus ...
- Hadoop【MR的分区、排序、分组】
[toc] 一.分区 问题:按照条件将结果输出到不同文件中 自定义分区步骤 1.自定义继承Partitioner类,重写getPartition()方法 2.在job驱动Driver中设置自定义的Pa ...
- Java打jar包详解
Java打jar包详解 一.Java打jar包的几种方式https://www.cnblogs.com/mq0036/p/8566427.html 二.MANIFEST.MF文件详解https://w ...