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类中方法介绍的更多相关文章

  1. Java多线程学习笔记(四)——Thread类中方法介绍

    currentThread():返回代码正在被哪个线程调用. public class CurrentThreadWay { public static void main(String[] args ...

  2. 【Java多线程系列二】Thread类的方法

    Thread实现Runnable接口并实现了大量实用的方法. /* * 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机会,它自己也有可能再次得到执行机会 */ public s ...

  3. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  4. JAVA多线程学习笔记(1)

    JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...

  5. Java多线程学习笔记(一)——多线程实现和安全问题

    1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...

  6. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  7. Java多线程学习笔记

    进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...

  8. java多线程(一)之继承Thread类

    一.概述 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 二.两种实现方式, 下面为第一种方式: 继承Thread类 ...

  9. Java多线程学习笔记--生产消费者模式

    实际开发中,我们经常会接触到生产消费者模型,如:Android的Looper相应handler处理UI操作,Socket通信的响应过程.数据缓冲区在文件读写应用等.强大的模型框架,鉴于本人水平有限目前 ...

随机推荐

  1. Jackson学习(一)

    Jackson的一些配置.使用方式以及效率方面的简单介绍. 1.jackson的maven依赖 <!-- jackson依赖 --> <dependency> <grou ...

  2. 【DOORS】如何基于DOORS实施需求管理

    引言 IBM Rational DOORS,简称DOORS,是被业界广泛认可的需求管理工具,在国内外需求管理领域具有较高的市场占有率.需求管理作为传统的工程领域,理论发展相对成熟和健全.随着越来越多的 ...

  3. 写lua时需要注意的地方

    条件语句判断时,只有false和nil会导致判断为假,其他的任何值都为真. Lua 的字符串与编码无关: 它不关心字符串中具体内容. 标准 Lua 使用 64 位整数和双精度(64 位)浮点数, 但你 ...

  4. [POJ1088] 滑雪(递归dp)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  5. swiper入门之快速实现轮播--手机端

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. asp.net 后台任务作业框架收集

    收集几个可以用于 asp.net 的后台任务工具库并简单介绍. hangfire.io 支持 单次任务(Fire-and-forget),延时任务(Delayed),重复任务(Recurring ), ...

  7. Digital Tutors - Creating an Action Adventure Puzzle in Unity学习笔记

    遇到的问题: 1 第11节Scripting the pressure plates中需要获取子物体的Animator组件,教程使用的语句如下: ”SwitchAnim = GetComponentI ...

  8. CoreAnimation 目录

    CoreAnimation 目录 CoreAnimation 开篇 CoreAnimation 寄宿图 CoreAnimation 图层几何学 CoreAnimation 视觉效果

  9. DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架

    为什么要重复造轮子 因为现有的轮子都在某些方面不太令我满意,下面我来一一点评一下,欢迎拍砖. Entity Framework 我喜欢傻瓜化使用方式的框架,同时又不失灵活性. EF虽然使用起来足够简单 ...

  10. mybatis基础学习4-插件生成器

    1:安装 2:在所建项目单击右键输入mybatis如下图 *建项目文件时不用建包和类,在配置文件里写即可生成 3:之后在项目生成 自己建的表(这个必须) 单击右键 即可 --------------- ...