线程行为:Java初学者

时间:2012-03-31 00:50:18

标签: java multithreading

我尝试编写一个使用线程的程序,但无法理解o / p。我有2个主题:st。但我看不到线程s正在发挥作用。

任何人都可以向我解释一下这种行为吗?感谢

我的代码:

public class Bground implements Runnable
{
    Thread t,s;

    Bground()
    {
        t = new Thread(this,"first thread");
        s = new Thread(this,"second thread");

        s.start();
        t.start();
    }

    public void run()
    {
        System.out.println("inside run" + t.getName());
        try
        {
            for (int i = 0; i < 5; i++)
            {
                System.out.println("In child thread" + i);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String argv[])
    {
        Bground b = new Bground();
        try
        {                
            for (int i = 0; i < 5; i++)
            {
                System.out.println("In main thread" + i);
                Thread.sleep(1);
            }
        }
        catch(InterruptedException e)
        {
            e.printStackTrace();
        }
    }
}

O / P:

c:\ Program Files \ Java \ jdk1.6.0_23 \ bin&gt; java Bground

  

主线程0     内部runfirst线程
    内部runfirst线程
    在子线程0     在子线程1中     在子线程2中     在主线程中1     在子线程3中     在子线程0     在子线程1中     在子线程2中     在子线程3中     在子线程4中     在主线程2中     在子线程4中     在主线程中3     在主线程中4

2 个答案:

答案 0 :(得分:2)

您正在打印线程“t”的名称两次。那就是问题所在。另一方面,线程似乎对我有用。 您可能想要使用此代码:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class Bground implements Runnable {
int name;

Bground(int name) {
    this.name=name;
}

public void run() {
    System.out.println("inside run" + name);
    try {
        for (int i = 0; i < 5; i++) {
            System.out.println("In child thread" + i);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String argv[]) {
    Bground b = new Bground(1);
    Bground b2 = new Bground(2);

    ExecutorService es = Executors.newFixedThreadPool(2);
    es.submit(b);
    es.submit(b2);
    synchronized (es) {
        es.notifyAll();
    }

    try {
        for (int i = 0; i < 5; i++) {
            System.out.println("In main thread" + i);
            Thread.sleep(1);
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}

答案 1 :(得分:2)

您期望打印出什么:

System.out.println("inside run " + t.getName());

你没有在这里获得当前线程的名称,而是你总是得到t-Thread的名字。要修复 - 获取当前主题并在其上调用getName()