public class ThreadTest extends Thread{
private int count = 10;
public String s;
public void run()
{
while(this.count > 0)
{
this.count = this.count -1;
System.out.println(s);
try {
this.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadTest test1 = new ThreadTest();
ThreadTest test2 = new ThreadTest();
test1.s = "A";
test2.s = "B";
test1.start();
test2.start();
}
}
追问这个无法实现依次打印的,当然也有可能恰好依次打印,但是肯定是不可控的。
追答既然AB是固定顺序,那就是一个过程的问题,为什么要2个线程?
1个线程输出 AB 就结了
算了,你非要2个线程,我这一个办法:把2线程放在队列里,顺序执行。
import java.util.ArrayList;
import java.util.List;
public class ThreadTest extends Thread{
public String s;
public void run()
{
System.out.println(s);
}
public static void main(String[] args) {
int count = 10;
List list = new ArrayList();
ThreadTest test1 = new ThreadTest();
ThreadTest test2 = new ThreadTest();
test1.s = "A";
test2.s = "B";
list.add(test1);
list.add(test2);
while(count > 0)
{
for(int i=0;i<list.size();i++)
{
Thread t = (Thread)list.get(i);
if(t.getState() != State.NEW)
{
t.start();
}
else
{
t.run();
}
}
count = count -1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
上边这个也不是绝对。因为只是打印一个字母,如果线程执行的东西复杂,那这个办法也不是绝对的。因为线程的执行先后不是程序说了算,而是操作系统说了算(CPU调度,时间片轮)。就算你设置了线程优先级,那也只是给操作系统的一个建议,可不是执行顺序。
你这个问题非要多线程,思路应该是线程算出结果,把结果交给调用者,调用者接到结果排序、打印或者其他处理。可以通过事件来弄。而不是线程的问题。