java并发编程学习之currentThread方法学习
2015-12-03 20:42
1261 查看
currentThread方法可以返回当前代码正在被谁调用的信息,在并发编程中很明显可以用来调试程序,看代码!
打印结果:
main
Thread-0
解释:
由程序结果可以看出构造方法是有当前叫main的线程执行的,而run方法是由Thread-0的线程执行的。
运行结果:
main
main
自己领悟吧,哈哈
总觉得写这么点太少了,那就再加一个吧!
欢迎加群交流: 282034885
运行结果:
11 Thread-0
22 main
33 Thread-0
44 Thread-0
简单解释下:
最后三个跟上面一样的,就解释下第一个,很明显this.getName()是继承的父类的方法,也就是Thread类中的方法。
贴上Thread的源码
从这里可以看出,打印的是这个name值,那个这个name哪里来的?继续看:
这个一看就明白了,name是实例变量,在构造方法里进行了初始化,调用了nextThreadNum传参给了init方法。同时也明白了为什么开始是Thread-0再创建就是Thread-1。。
public class Thread4 { public static void main(String[] args) { Thread4_1 t4 = new Thread4_1(); Thread t = new Thread(t4); t.start(); } } class Thread4_1 implements Runnable{ public Thread4_1(){ System.out.println(Thread.currentThread().getName()); } @Override public void run() { System.out.println(Thread.currentThread().getName()); } }
打印结果:
main
Thread-0
解释:
由程序结果可以看出构造方法是有当前叫main的线程执行的,而run方法是由Thread-0的线程执行的。
public class Thread4 { public static void main(String[] args) { Thread4_1 t4 = new Thread4_1(); // Thread t = new Thread(t4); // t.start(); t4.run(); } } class Thread4_1 implements Runnable{ public Thread4_1(){ System.out.println(Thread.currentThread().getName()); } @Override public void run() { System.out.println(Thread.currentThread().getName()); } }
运行结果:
main
main
自己领悟吧,哈哈
总觉得写这么点太少了,那就再加一个吧!
欢迎加群交流: 282034885
public class Thread4 { public static void main(String[] args) { Thread4_1 t4 = new Thread4_1(); t4.start(); //t4.run(); } } class Thread4_1 extends Thread { public Thread4_1(){ System.out.println("11 "+this.getName()); System.out.println("22 "+Thread.currentThread().getName()); } @Override public void run() { System.out.println("33 "+this.getName()); System.out.println("44 "+Thread.currentThread().getName()); } }
运行结果:
11 Thread-0
22 main
33 Thread-0
44 Thread-0
简单解释下:
最后三个跟上面一样的,就解释下第一个,很明显this.getName()是继承的父类的方法,也就是Thread类中的方法。
贴上Thread的源码
public final String getName() { return String.valueOf(name); }
从这里可以看出,打印的是这个name值,那个这个name哪里来的?继续看:
private char name[]; public Thread() { init(null, null, "Thread-" + nextThreadNum(), 0); } private static int threadInitNumber; private static synchronized int nextThreadNum() { return threadInitNumber++; } private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc) { if (name == null) { throw new NullPointerException("name cannot be null"); } this.name = name.toCharArray(); Thread parent = currentThread(); SecurityManager security = System.getSecurityManager(); //省篇幅没贴完
这个一看就明白了,name是实例变量,在构造方法里进行了初始化,调用了nextThreadNum传参给了init方法。同时也明白了为什么开始是Thread-0再创建就是Thread-1。。
相关文章推荐
- java多线程(二)---线程的同步
- LeetCode 14 : Longest Common Prefix (Java)
- java 试题java编译问题
- 深入理解Javac编译器
- What is java语法糖
- Java代码获取NTP服务器时间
- springmvc
- [置顶] Spring MVC POST中文乱码解决方案
- Java 中的守护(Daemon)线程中finally代码块是否执行的问题
- JAVA_SE ----- 基础知识总结-----反射
- 如何在JavaWeb程序中使用自定义标签(tag、tld两种)
- spring注解或依赖注入模拟MVC结构案例<五>
- 合服表合并
- eclipse背景颜色修改
- 在Myeclipse下查看Java字节码指令信息
- spring bean的scope
- java 替换字符串中的中括号
- javaBean的介绍及其简单应用
- Eclipse+SVN搭建开发环境
- java并发--线程应用