发布网友
共4个回答
热心网友
你这样写两个线程实例t1和t2间没有交互通信,各跑各的,当然不会达到你上面说的那个结果。要想达到你上面说的那个效果,必须进行线程间通信。比如,你可以让两个线程实例都对方的引用,在run函数里执行打印的方法后,就让t2跑,t1去睡觉(sleep())。等t2打印完后,又让t1跑,让t2去睡觉,这样即可。 给你思路,代码我就不写了。
热心网友
...
热心网友
帮你改了改,测试可行
public class ThreadTest1 extends Thread {
private static int num = 0, n = 100;
static ThreadTest1 t1, t2;
static int i = 0;
static int x;
static String ss = new String();
public ThreadTest1() {
start();
}
public void run() {
for (x = 0; x < 200; x++) {
synchronized (ss) {
ss.notify();
Print();
try {
ss.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
synchronized (ss) {
ss.notifyAll();
}
}
public void Print() {
if (i == 0) {
i++;
System.out.println(this.getName() + ":" + ++num);
} else {
i = (i + 1) % 2;
System.out.println(this.getName() + ":" + n++);
}
}
public static void main(String[] args) throws InterruptedException {
t1 = new ThreadTest1();
t2 = new ThreadTest1();
}
}
热心网友
用个对象锁,获得对象锁的线程打印就行了。