Java多线程学习笔记(四)——Thread类中方法介绍
currentThread():返回代码正在被哪个线程调用。
public class CurrentThreadWay { public static void main(String[] args) {
ThreadTest t = new ThreadTest();
t.start();
}
}
public class ThreadTest extends Thread{ public ThreadTest(){
System.out.println("调用构造方法的线程是:"+Thread.currentThread().getName());
}
public void run(){
System.out.println("调用run方法的线程是:"+Thread.currentThread().getName());
}
}
运行结果:
调用构造方法的线程是:main
调用run方法的线程是:Thread-0
isAlive():判断当前线程是否处于活动状态。活动状态就是线程已经启动尚未终止,线程处于正在运行或者开始准备运行状态。
public class IsAliveTest {
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
System.out.println("t在活动状态吗?="+t.isAlive());
t.start();
System.out.println("t在活动状态吗?="+t.isAlive());
}
}
public class ThreadTest extends Thread{
public void run(){
System.out.println("run="+this.isAlive());
}
}
运行结果:
t在活动状态吗?=false
t在活动状态吗?=true
run=true
sleep():是在指定毫秒内让当前"正在运行的线程(currentThread()返回的方法)"休眠(暂停执行)
public class SleepTest {
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
System.out.println("begin="+System.currentTimeMillis());//当前时间
t.run();
System.out.println("end="+System.currentTimeMillis());//休眠后时间
}
}
public class ThreadTest extends Thread{
public void run(){
System.out.println("run threadName:"+this.currentThread().getName()+" begin...");
try {
Thread.sleep(2000);
System.out.println("run threadName:"+this.currentThread().getName()+" end...");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
begin=1492568214427
run threadName:main begin...
run threadName:main end...
end=1492568216428
修改上面代码:
public class SleepTest {
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
System.out.println("begin="+System.currentTimeMillis());
t.start();
System.out.println("end="+System.currentTimeMillis());
}
}
public class ThreadTest extends Thread{
public void run(){
System.out.println("run threadName:"+this.currentThread().getName()+" begin= "+System.currentTimeMillis());
try {
Thread.sleep(2000);
System.out.println("run threadName:"+this.currentThread().getName()+" end= "+System.currentTimeMillis());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
begin=1492568593345
end=1492568593345
run threadName:Thread-0 begin= 1492568593345
run threadName:Thread-0 end= 1492568595346
因为main线程和ThreadTest线程是异步执行的,所以首先先打印main线程的begin和end,在运行ThereadTest,打印run begin和run end相关信息。
getId():获取当前线程的唯一标识符
public class CurrentThreadWay { public static void main(String[] args) {
ThreadTest t1 = new ThreadTest();
ThreadTest t1 = new ThreadTest();
System.out.println(Thread.currentThread().getName()+" "+Thread.currentThread().getId());
t1.start();
t2.start();
System.out.println(t.getName()+" "+t1.getId());
System.out.println(t2.getName()+" "+t2.getId());
}
}
运行结果:
main 1
Thread-0 9
Thread-1 10
yield():作用是让当前线程放弃cpu执行权,让给别的线程去占用CPU执行时间,但放弃时间长短不确定,可能刚放弃,又抢回CPU的执行权。
public class YieldTest {
public static void main(String[] args) {
ThreadTest t = new ThreadTest();
t.start();
}
}
ThreadTest中run方法为:
public void run(){
long beginTime = System.currentTimeMillis();
int count = 0;
for(int i=0;i<500000;i++){
//Thread.yield();
count = count+i;
}
long endTime = System.currentTimeMillis();
System.out.println("所需时间为:"+(endTime-beginTime)+"毫秒!");
}
结果为:2毫秒
去掉注释后为:93毫秒,CPU让给其他线程,导致结果变慢。
setPriority()和getPriority():
前者是设置线程优先级,后者是获得线程优先级。Java中优先级分为1~10级,超出这个范围会抛出Throw new IllegalArgumentException();
public class SetGetPriority {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getName()+"等级为:"
+Thread.currentThread().getPriority());
//Thread.currentThread().setPriority(6);
System.out.println(Thread.currentThread().getName()+"等级为:"
+Thread.currentThread().getPriority());
ThreadTest t = new ThreadTest();
//t.setPriority(6);
t.start();
}
}
public void run(){
System.out.println(this.currentThread().getName()+"的等级为:"+this.getPriority());
}
输出为:
main等级为:5
main等级为:5
Thread-0的等级为:5
去掉注释后结果后:
main等级为:5
main等级为:6
Thread-0的等级为:6
线程默认优先级为5,优先级越高不一定越先执行完,只能说概率更大一些。
Java多线程学习笔记(四)——Thread类中方法介绍的更多相关文章
- Java多线程学习笔记(一)——Thread类中方法介绍
currentThread():返回代码正在被哪个线程调用. public class CurrentThreadWay { public static void main(String[] args ...
- 【Java多线程系列二】Thread类的方法
Thread实现Runnable接口并实现了大量实用的方法. /* * 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机会,它自己也有可能再次得到执行机会 */ public s ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
- Java多线程学习笔记(一)——多线程实现和安全问题
1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...
- Java多线程学习(四)等待/通知(wait/notify)机制
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79690279 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- Java IO学习笔记四:Socket基础
作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回
<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回
随机推荐
- powerShell赋权限
1.给网站赋权限 Set-SPUser –Identity “用户名” –AddPermissionLevel “参与讨论” –web “http://url” 2.给列表赋权限 $web = Get ...
- web网站架构演变过程
我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一. ...
- Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)
Cookies 1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...
- [NOI2015Day1]解题报告
今天一起做NOI的题. 我仅仅想说SunshinAK了好神啊. T3数据好坑啊,打表竟然被编译环境卡掉了... T1:程序自己主动分析 (http://www.lydsy.com/JudgeOnlin ...
- 复制class文件到as中出现非法字符,须要class,interface货enum
问题如题,出现此情况是在导入eclipse项目到Android Studio出现这种错误, 非法字符: '\ufeff' 解决方式|错误: 须要class, interface或enum,查阅后了解到 ...
- ubuntu12.04通过Ganglia利用NVML模块进行GPU监控
1.安装Ganglia,这里安装的是3.1*版本,因为监控GPU的模块只支持3.1*版本系列的 apt-get install ganglia* 2.下载并安装PyNVML和NVML模块,下载地址ht ...
- sdut 4-1 复数类的运算符重载
4-1 复数类的运算符重载 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目的练习能够掌握成员运算符重载及友元运算符重载 要求定义一个复数类.重 ...
- 【bzoj2600】 [Ioi2011]ricehub
如果发现尾指针到头指针这段稻田的中位数上建一个粮仓时距离之和超过了B 就调整尾指针对距离维护一个前缀和 每次取中位数之后可以O(1)计算距离和 #include<algorithm> #i ...
- charset='utf8mb4'
charset='utf8mb4' conn = pymysql.connect(host=h, port=pt, user=u, passwd=p, db=db, charset='utf8mb4' ...
- HTML DOM Table 对象
Table 对象 Table 对象代表一个 HTML 表格. 在 HTML 文档中 <table> 标签每出现一次,一个 Table 对象就会被创建. Table 对象集合 集合 描述 c ...