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虚拟机学习笔记》- 第19章 方法的调用与返回
		<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回 
- Java多线程学习笔记
		进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ... 
- java多线程(一)之继承Thread类
		一.概述 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 二.两种实现方式, 下面为第一种方式: 继承Thread类 ... 
- Java多线程学习笔记--生产消费者模式
		实际开发中,我们经常会接触到生产消费者模型,如:Android的Looper相应handler处理UI操作,Socket通信的响应过程.数据缓冲区在文件读写应用等.强大的模型框架,鉴于本人水平有限目前 ... 
随机推荐
- 1819: [JSOI]Word Query电子字典
			1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 729 Solved: 238[Submit][S ... 
- Archlinux 的U盘自动装载(三)udevil
			U盘的自动装载方法,目前我已经使用过以下几种方法: udev 规则 基于 udev 规则的 Shell script udisks 以及 udisks2 结果,总是存在这样那样的小问题.例如,文件名乱 ... 
- H5    Canvas vs. SVG
			HTML 5 Canvas vs. SVG HTML5 SVG HTML5 地理定位 Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XM ... 
- Spring Data JPA,一种动态条件查询的写法
			我们在使用SpringData JPA框架时,进行条件查询,如果是固定条件的查询,我们可以使用符合框架规则的自定义方法以及@Query注解实现. 如果是查询条件是动态的,框架也提供了查询接口. Jpa ... 
- mysql语句sum求和为null的问题
			select sum(price) as price from order where status='SUCCESS'; 如果price对应的所有的值为0,那么算出来的和为null: 可以采用ifn ... 
- SQL AlawaysOn 之一:安装域控制器
			一.准备阶段 1. 计算机名称命名 2.IP地址修改.DNS修改 IP地址和DNS不一定要和图上的一致,只要固定就行了 二.安装阶段 1.服务器管理器,仪表盘,点击“添加角色和功能” 2.添加角色和 ... 
- JS停止事件冒泡
			..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C的stopP ... 
- 运行错误:应用程序无法启动因为并行配置不正确。the application has failed to start because its side-by-side configuration is incorrect  解决方法
			问题描述: 当电脑同时安装VS2008和VS2008 SP1时,编译出来的Visual C++程序的manifest 文件会默认引用VS2008的MFC版本和CRT版本.如下: <depende ... 
- 基于ThinkPHP 5.0与Vue.JS 2.x的前后端开源开发框架VueThink
			VueThink 项目介绍 VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的 ... 
- 新人报道~cnblogs
			我的名字:杨先生 我的英文名:Allen 和你们一样,是一名程序猿,专业技能 C#.前端小块. 
