我尝试编写一个使用线程的程序,但无法理解o / p。我有2个主题:s
和t
。但我看不到线程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
答案 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()
。