直接上代码:
public class GetNameThreadDemo extends Thread
{
public static void main(String[] args)
{
GetNameThreadDemo t=new GetNameThreadDemo();
t.start();
for(int i=0;i<10;i++)
{
t.printMsg();
}
}
public void run()
{
for(int i=0;i<10;i++)
printMsg();
}
//取得当前线程的引用,赋给Thread对象t
public void printMsg()
{
Thread t=Thread.currentThread();
String name=t.getName();
System.out.println("name="+name);
}
}
这段代码可以正常运行,但是一开始使用this来调用方法报错:
我想知道为啥在类内部调用方法还用实例化对象的方式.不是直接用this吗?
不会是写在main里面吧
this只有实例化以后才有意义,没有实例化this没有指向。
main是静态方法,静态方法中调用必须是静态方法或者实例.方法的方式
把调用的方法改成静态的试试?
因为这个GetNameThreadDemo类不是一个static类 而这个main方法是一个static方法,在一个静态方法中是不能调用一个静态变量的。
package com.king.test;
public class ThreadTest {
public static void main(String[] args) {
// 继承Thread创建一个线程
// Cat cat = new Cat();
// cat.start();
// cat.start();
// 这是错的,线程对象不能启动两次
// 实现Runnable接口创建一个线程
Dog dog = new Dog();
Thread t1 = new Thread(dog);
Thread t2 = new Thread(dog);
Thread t3 = new Thread(dog);
t1.start();
t2.start();
t3.start();
}
}
class Cat extends Thread {
private int times = 0;
// 重写run函数
public void run() {
while (times < 10) {
// 休眠一秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 显示当前线程的名字
System.out.println(Thread.currentThread().getName() + " hello cat "
+ times);
times++;
}
}
}
class Dog implements Runnable {
private int times = 0;
public void run() {
while (true) {
// 休眠一秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 线程同步(同步代码块)
synchronized (this) {
// 显示当前线程的名字
System.out.println(Thread.currentThread().getName()
+ " hello dog " + times);
times++;
}
}
}
}
静态方法不能使用this,也不能访问非静态成员。
如果要访问,去掉static
别把main方法当成是你这个类的方法看。
this只有在非静态方法中才能使用,指的是当前对象本身。
请理解this这个词语的意思。。在java中this只代表当前的类
class A{
this表示a
class B{
this表示b
}
}