Java多线程状态及方法实例解析
作者:戈德里克山谷 发布时间:2021-09-10 22:49:53
标签:Java,多,线程,状态,方法
这篇文章主要介绍了Java多线程状态及方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先介绍线程的五种状态:
新生态:New Thread()
就绪态:准备抢CPU时间片
运行态:抢到了CPU时间片
阻塞态:放弃已经抢到的CPU时间片,且暂时不参与争抢
死亡态:Run运行完了之后
接下来介绍三种方法:线程的阻塞,线程的优先级设置,线程的礼让
public class MutliThreadDemo4 {
public static void main(String[] args) {
threadBlock();
//threadPriority();
//threadYield();
}
/**
* 线程的阻塞
*/
private static void threadBlock() {
//创建Runnable接口实现类的对象
Runnable r = () -> {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
//线程休眠(由运行状态到阻塞状态,时间过了回到就绪态,重新争抢),直观上表现为停顿打印
try {
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
};
//实例化
new Thread(r, "甲").start();
}
/**
* 线程的优先级
*/
private static void threadPriority() {
Runnable r = () -> {
for(int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
}
};
Thread t1 = new Thread(r, "甲");
Thread t2 = new Thread(r, "乙");
//设置优先级,必须在开始执行(start)之前
//设置线程的优先级,只是修改这个线程可以去抢到CPU时间片的概率。
//并不是优先级高的线程一定能抢到CPU时间片
//优先级的设置,是一个整数(0,10]的整数,默认是5
t1.setPriority(10);
t2.setPriority(1);
t1.start();
t2.start();
}
/**
* 线程的礼让
*/
private static void threadYield() {
//线程释放自己的CPU资源,由运行状态,回到就绪状态
//匿名内部类
Runnable r = new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + ":" + i);
if (i == 3) {
Thread.yield();
}
}
}
};
Thread thread1 = new Thread(r, "thread-1");
Thread thread2 = new Thread(r, "thread-2");
thread1.start();
thread2.start();
}
}
来源:https://www.cnblogs.com/ggrrbb/p/12289677.html


猜你喜欢
- 本文实例讲述了Android实现使用微信登录第三方APP的方法。分享给大家供大家参考,具体如下:使用微信登录APP,免去注册过程,现在已经有
- 将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment :1.由
- PipedOutputStream和PipedInputStream在java中,PipedOutputStream和PipedInputS
- 首先写布局文件activity_main.xml:<LinearLayout xmlns:android="http://s
- 相信大家最关心的肯定不是什么一大堆的破理论,然后还似懂非懂的,最关心得莫过于服务之间的参数传递,数据获取。Ok,今天就告诉大家三种微服务之间
- WPF动画效果系列WPF实现动画效果(一)之基本概念WPF实现动画效果(二)之From/To/By 动画WPF实现动画效果(三)之时间线(T
- 前言由于刚写项目不久,在写 web 后台接口时,经常会对前端传入的参数进行一些规则校验,如果入参较少还好,一旦需要校验的参数比较多,那么使用
- 1、IDEA右键没有创建新的package选项2、在Idea中创建XML文件,发现"URI is not registered&q
- 经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试。但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不
- 静态库和动态库的区别1、静态库的扩展名一般为".a"或者".lib";动态库的扩展名一般为"
- 前言微信群里的一个提问引发的这个问题,C#异步有多少种实现方式?首先想要知道C#异步有多少中实现方式,首先我们要知道.NET提供的执行异步操
- 本文实例讲述了Android开发实现的简单五子棋游戏。分享给大家供大家参考,具体如下:我刚刚在Android上写的一个五子棋的小程序,在这里
- 本文实例讲述了C#时间戳基本用法。分享给大家供大家参考。具体如下:一、C#如何生成一个时间戳/// <summary> ///
- 介绍:kaptcha 是谷歌开源的非常实用的验证码生成工具一、导入jar包<!-- kaptcha验证码 --><depe
- 最近开发的时候,偶尔遇到在线上稳定运行的webview内嵌的h5页面加载不出来,一直定位不到具体原因(因为我们自己做的兼容性测试上不重现),
- 0.简介GridView 和 ListView 有共同的父类:AbsListView,因此 GridView 和 ListView 具有一定
- 普通校验导入依赖:默认的报错:没有提示具体的属性设置自己的错误信息提示:创建 ValidationMessages.properties内容
- 杨辉三角的规律:1.每行的数据个数和在第几行一样。2.每行第一个数和最后一个数都是1.3.每行除了第一个数据和最后一个数据 其他数据的值等于
- Java 中的运算符与 C 语言基本一致。1、算术运算符操作符描述例子+加法 : 相加运算符两侧的值A + B 等于 30-减法 : 左操作
- 序列化和反序列化Java是面向对象的语言,与其他语言进行交互(比如与前端js进行http通信),需要把对象转化成一种通用的格式比如json(