3.Thread中的静态方法
1.currentThread()
public class Thread14 extends Thread{
static {
System.out.println("静态块的打印:" + Thread.currentThread().getName());
}
public Thread14() {
System.out.println("构造方法的打印: " + Thread.currentThread().getName());
}
public void run() {
System.out.println("run()方法的打印:" + Thread.currentThread().getName());
}
//test
public static void main(String[] args) {
Thread14 thread14 = new Thread14();
thread14.start();
}
}
运行结果:
静态块的打印:main
构造方法的打印: main
run()方法的打印:Thread-0
这个例子说明了,线程的构造方法、静态块是被main线程调用的,而线程类的run()方法才是应用线程自己调用的。
public class Thread15 extends Thread{
public Thread15() {
System.out.println("thread15 ---->begin");
System.out.println("Thread.currentThread().getName()----->" + Thread.currentThread().getName());
System.out.println("this.getName()----->" + this.getName());
System.out.println("thread15---->end");
}
public void run() {
System.out.println("run------->begin");
System.out.println("Thread.currentThread.getName()---->" + Thread.currentThread().getName());
System.out.println("this.getName()------>" + this.getName());
System.out.println("run------>end");
}
public static void main(String[] args) {
Thread15 thread15 = new Thread15();
thread15.start();
}
}
运行结果:
thread15 ---->begin
Thread.currentThread().getName()----->main
this.getName()----->Thread-0
thread15---->end
run------->begin
Thread.currentThread.getName()---->Thread-0
this.getName()------>Thread-0
run------>end
当在执行Thread15 thread15 = new Thread15()的时候,this.getName也就是当前线程却是Thread-0.
2.sleep(long millions)
该方法的作用是在指定的时间内让当前正在执行的线程Thread.currentThread()暂停执行,也就是休眠。值得注意的一点是,该方法并不让出cpu资源,换句话说,也就是CPU依然在执行run()中的内容,无非这个内容是休眠而已。
public class Thread16 extends Thread{
public void run() {
try{
System.out.println("run threadName= " + this.getName() + " begin");
Thread.sleep(20000);
System.out.println("run threadName= " + this.getName() + " end");
}catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread16 thread16 = new Thread16();
System.out.println("begin= " + System.currentTimeMillis());
thread16.start();
System.out.println("end= " + System.currentTimeMillis());
}
}
执行结果:
begin= 1447813479735
end= 1447813479736
run threadName= Thread-0 begin
run threadName= Thread-0 end
System.out.print是静态方法,因此输出的内容很快就会完成。启动的线程中有个休眠过程,thread-0 begin 和 thread-0 end 中间就会有等待。
3.yield()
public class Thread17 extends Thread{
public void run() {
long beginTime = System.currentTimeMillis();
int count = 0;
for(int i = 0; i < 50000000; i++) {
Thread.yield();//去掉之后明显整个程序运行时间剪短
count = count + i + 1;
}
long endTime = System.currentTimeMillis();
System.out.println("用时:" + (endTime - beginTime) + "毫秒" + count);
}
public static void main(String[] args) {
Thread17 thread17 = new Thread17();
thread17.start();
// Thread.currentThread().interrupt();
// System.out.println("1---" + Thread.interrupted());
// System.out.println("2---" + Thread.interrupted());
}
}
yield()就是暂停当前执行的线程,并执行其他线程。这个暂停会是放弃cpu资源的,并且放弃cpu时间不确定,有可能刚放弃就又获得了。因此这里因为yield()方法中间消耗的时间也是不确定的。
4.interrupted()
public static void main(String[] args) {
// Thread17 thread17 = new Thread17();
// thread17.start();
Thread.currentThread().interrupt();
System.out.println("1---" + Thread.interrupted());
System.out.println("2---" + Thread.interrupted());
}
测试当前线程是否已经中断,执行后就将状态标示改为false。因此,两次调用后返回必然为false
执行结果:
1---true
2---false
3.Thread中的静态方法的更多相关文章
- Java多线程4:Thread中的静态方法
一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可 ...
- Java多线程3:Thread中的静态方法
Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...
- java 多线程3:Thread类中的静态方法
Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程 ...
- (二)线程Thread中的方法详解
1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...
- 测试Thread中的常用方法
package com.yhqtv.java; /* *测试Thread中的常用方法: * 1.start():启动当前线程:调用当前线程的run() * 2.run():通常需要重写Thread类的 ...
- 线程Thread中的方法详解(二)
1.start() start()方法的作用讲得直白点就是通知"线程规划器",此线程可以运行了,正在等待CPU调用线程对象得run()方法,产生一个异步执行的效果.通过start( ...
- java多线程2:Thread中的方法
静态方法: Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程". 为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面 ...
- 测试Thread中的常用方法:
测试Thread中的常用方法:start():启动当前线程:调用当前线程的run()run(): 通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中currentThread ...
- Java多线程2:Thread中的实例方法
Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1 ...
随机推荐
- MVVM1
silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...
- Windows系统架构
操作系统模型 大多数操作系统中,都会把应用程序和内核代码分离运行在不同的模式下.内核模式访问系统数据和硬件,应用程序运行在没有特权的模式下(用户模式),只能使用有限的API,且不能直接访问硬件.当 ...
- [Thinkbayes]贝叶斯思维读书笔记-1-贝叶斯定理
使用贝叶斯定理,目前来看最重要的一点在于假设.就是未知事件已知化,同时也要注意假设的全程性,不能从中开始新的假设,这种假设往往是不全面的. 我自己找到的假设的方法有两种,一种是命名,一种是时序.全程性 ...
- canvas中window坐标转换为canvas坐标
function getMousePos(canvas, evt) { var rect = canvas.getBoundingClientRect(); return { x: evt.clien ...
- CSS两端对齐
前面的话 两端对齐在导航条Tab的制作中非常常用.本文将详细介绍CSS两端对齐的3种实现方式 flex 弹性盒模型flex作为强大的弹性布局方式,可以hold住大部分的布局效果,当然也包括两端 ...
- linux环境变量入门
一.概要 本文用java环境变量配置这个案例来介绍linux下的环境变量是怎样的,并且和windows系统下的环境变量语法进行了相应对比,适合初学者入门.在这之前,我已经将jdk.tomcat和ecl ...
- Sql Server 自定义函数(原创)
---------------------------------------------------------------------------------------------- 传入字符串 ...
- C#中转义字符
编程中很多细节问题我们都要十分的注意,要不一个小小的字母错误就能引起程序的无法运行. C#中转义字符分2中,一种是\,一种是@. @符号在C#中有两个作用作用1.在字符串的前面加@表示取消字符串中的转 ...
- C++继承、多态、虚函数
#答案:http://www.cnblogs.com/tinaluo/articles/6290994.html 1 编写程序:定义一个抽象基类sharpe,只有包含一个求面积的纯虚函数,派生出矩形类 ...
- CSS3 background-size:cover/contain
background-size的cover和contain指定背景图片的自适应方式,只能对整张图片进行缩放. cover是拉伸图片使之充满元素,元素肯定是被铺满的,但是图片有可能显示不全. conta ...