java线程声明中的多线程

时间:2014-11-15 11:43:13

标签: java multithreading

这些是我的代码中的几行:

class abc {
    public static void main(String br[]){
        Age age=new Age(21);
        Thread th1=new Man("Thread1",age);
        Thread th2=new Woman("Thread2",age);
        th1.start();
        th2.start();
    }
}

class Age
{ 
    int age;
    Age(int a) {
        this.age=a;
    }
}

class Man extends Thread()
{
    Age age;
    Man(String name,Age age)
    {
        super(name);
        this.age=age;
    }
} 

女人班完全一样。

我有三个班,年龄,男人,女人。任何人都可以解释第2和第3行发生的事情吗?我的意思是,班级的调用对象是什么?每个线程的调用对象是什么?另外,如果我在this类中使用Man,它会引用什么对象 - 调用对象或age 21?

2 个答案:

答案 0 :(得分:2)

你的代码毫无意义。您正在构造一个类Man的实例,它是Thread的子类,但是您不能将任何Runnable实例传递给Thread的构造函数,并且您不能覆盖run()方法您Thread课程中的Man。这意味着当您启动线程时,它将执行run()类的默认空Thread方法,该方法不执行任何操作并立即返回。

答案 1 :(得分:0)

thp(th1.start()和th2.start()调用将线程放入'READY TO RUN'队列,当线程有机会从'READY TO RUN'移动到'RUNNABLE'时(即运行)这是在调用类的run()方法时。

不同的JVM有不同的策略将线程置于RUNNABLE状态。 同样基于run()方法的实现,线程在内存中重构或被移出或终止。

start()方法的调用对象是Thread的实例,在你的情况下是si th1和th2。