java线程学习-Thread.currentTread().getName()和this.getName()的区别

很久没有写java程序了,由于为了改变目前的状况,打算花两天时间学习一下java的线程开发和高并发。

线程开发使用thread类,或者runnable接口,而且thread类也是实现了runnable接口的。

先来个小甜点作为开始,如下为创建多个线程,并且同时处理。

package firstThreadStudy;

public class MyThread extends Thread {
	public MyThread(){

		System.out.println("MyThread currentThread().getName()="+Thread.currentThread().getName());
		System.out.println("MyThread this.getName=" + this.getName());

	}
	@Override
	public void run(){

		System.out.println("run currentThread().getName()="+Thread.currentThread().getName());
		System.out.println("run this.getName="+this.getName());
		int i=2;
		while(i>0)
		{
			System.out.println("run " + this.getName() + ": i = " + (i--));
			try{
			Thread.sleep(1000);
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}

	}
}

测试类:

package firstThreadStudy;

public class Test2MyThread {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyThread boy = new MyThread();
		boy.setName("boy");
		MyThread girl = new MyThread();
		girl.setName("girl");
		Thread car = new Thread(girl);
		car.setName("car");
		boy.start();
		car.start();
		System.out.println("method end");
	}

}

另外,特别补充说明

Thread.currentThread().getName()

this.getName()

的区别,前者表示调用当前方法的线程名,后者表示当前线程对象名。可能不是很好理解,根据下面输出解释会比较好理解些。

上列的输出可能性之一如下(线程是随机调度的):

MyThread currentThread().getName()=main
MyThread this.getName=Thread-1
MyThread currentThread().getName()=main
MyThread this.getName=Thread-2
run currentThread().getName()=boy
run this.getName=boy
method end
run currentThread().getName()=car
run boy: i = 2
run this.getName=girl
run girl: i = 2
run girl: i = 1
run boy: i = 1

girl对象和 car对象是两个对象,因为this.getName()是girl对象中的代码,所以this访问的girl对象。

Thread.currentTread().getName()指当前调用方法的线程对象,不是指gril对象,而是car对象,girl对象只是一个传入其中的参数,girl对象的run方法是由car对象的start()方法触发调度,并不是girl对象的start()触发。gril虽然是个线程对象,但是并未启动,所以其本身并没有线程,而是依托在car线程中执行。

额,我觉得说了上面这些废话,应该能解释清楚。

时间: 2024-12-20 04:19:00

java线程学习-Thread.currentTread().getName()和this.getName()的区别的相关文章

黑马程序与----java线程学习

线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源.一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行.由于线程之间的相互制约,致使线程在运行中呈现出间断性.线程也有就绪.阻塞和运

JAVA线程应用Thread

java线程学习: 基本概念: 当一个程序开启的时候,会启动一个进程,在进程中会开启线程,如果只有一个线程,这个线程就称为主线程.如果进程停止,会先杀死线程再退出! java线程类:Thread  方法的作用: 如:start()方法启用线程,调用run方法启动进程. //定义线程类名;继承Thread类 class Demo extends Thread { //复写Runnable 的run方法; public void run() { for(int x=0;x<60;x++) { Sys

Java线程学习经典例子-读写者演示

Java线程学习最经典的例子-读写者,主要用到Thread相关知识如下: -         线程的start与run -         线程的休眠(sleep) -         数据对象加锁(synchronized) -         数据对象的等待与释放(wait and notify) 程序实现: -ObjectData数据类对象,通过synchronized关键字实现加锁,在线程读写者中使用. -ConsumerThread消费者线程,读取数据对象中count值之后,通知生产者

Java线程学习笔记(二) 线程的异常捕捉

线程异常的捕捉: 正常的情况下,我们在main()方法里是捕捉不到线程的异常的,例如以下代码: public class ExceptionThread implements Runnable{ @Override public void run() { throw new NullPointerException(); } public static void main(String[] args) { ExecutorService executorService = Executors.n

Java线程学习笔记(一)

一.线程的创建方式: 老掉牙的话题了,继承 java.lang.Thread父类或者实现Runnalbe接口,这里就提一句: class Thread implements Runnable Thread也是继承了Runnable接口的,Runnable才是大哥. 重写run(),run()里放的都是具体的业务,包括对线程的具体操作. class Thread1 implements Runnable { int i; Thread1(int i) { this.i = i; } @Overri

java 线程学习。

一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在Windows系统中,一个运行的exe就是一个进程. 线程是指进程中的一个执行流程,一个进程中可以运行多个线程.比如java.exe进程中可以运行很多线程.线程总是属于某个进程,进程中的多个线程共享进程的内存. "同时"执行是人的感觉,在线程之间实际上轮换执行. 二.Java中的线程 使用

java线程学习(一)

1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.bluej.javaj.thread.first; 2.创建线程 继承Thread类.实现Runnale接口.实现Callable接口. 1 /** 2 * 创建线程方式一 3 * @author xingdongjie 4 * 5 */ 6 class CreateThread1 extends Thr

java线程学习-thread的一些方法

isAlive测试线程是否活动. 所谓活动状态,是指线程已经启动且尚未终止. sleep表示暂停执行,但是线程还是活着的,即isAlive还是true. getId获取线程唯一标识. 停止线程是比较重要的,有始有终. 这里面说明一下,停止线程,不可以用stop,这个方法是不推荐使用的,如同suspend和resume一样,都是作废的方法,使用它们可能产生不可预知的结果. 目前停止线程的方法有: 1.使用退出标志,在run方法完成后线程终止.推荐使用改种方法. 2.使用stop,不推荐,应该不用.

学习java线程学习笔记

线程:代码执行的一个分支          主要作用是提高了效率,cpu能同时执行多个部分的代码.      线程的创建:两种方式      a.继承于thread类,重写run方法.      b.实现了runable接口,实现run方法.                  启动线程必须用线程的start方法:如果直接调用线程的run方法则就是单线程了.      有一个对象启动两个线程和两个对象启动两个线程的区别:一个对象启动两个线程,两个线程中的修改的内容始终是针对同一个对象的.两个对象启